Fehler beim einlesen der Festplatte

Hallo,
ich wollte meine Netzwerkfestplatte ( ist ziemlich gross ) einlesen!
Bekomm aber beim Ausführen des Scriptes immer die Fehlermeldung der Zeitüberschreitung :frowning:
Hab gelesen das man dies nicht so einfach ändern kann oder soll??
Gibt es eine andere möglichkeit zum einlesen der mp3 Datein von der Festplatte?

Welches?

Das richtige Forum dafür hast du ja gefunden.
So kann dir niemand helfen…

Sorry,
die Fehlermeldung lautet:

Fatal error: Maximum execution time of 30 seconds exceeded in [Media Player\Media Player\Playlist aktualisieren] on line 25

Zum einlesen der Festplatte nehme ich folgenden Script:

$path = „//A1modem/a“;

Nachdem der Fehler in Zeile 25 auftritt kann das ja wohl nicht wirklich das betreffende Skript sein :confused:.

wie viele Dateien sind in dem Verzeichnis? Liest Du es rekursiv ein?

kann es sein, dass das einlesen des Verzeichnisses länger als 30s dauert?

Ja, es dauert länger als 30 Sekunden.
Es sind sicherlich über 100 Verzeichnisse die ich einlesen möchte.
Wenn ich direkt einen Ordner auswähle, dann funktioniert es ja, aber wenn mehrere Ordner zur Auswahl stehen, dauert es länger als die 30 Sekunden dann bekomm ich die Fehlermeldung!?

Dann wirst Du halt die „max execution time“ für dieses Skript erhöhen müssen, oder weniger einlesen :eek:

Hallo Powerfreddy,
danke für den Tipp, kannst du mir bitte erklären wie ich das mache?
Es betrifft nur dieses Script

Schau dir mal die php.ini an. Ist aber möglich dass das Einfluss auf dein gesamtes IPS hat.

Gruß,

Toni

Nein, dann lass ich Das lieber!
Was wäre wenn ich für jeden Ordner ein einlesescript erstelle?
Bringt Das was?

Manche Sachen erschließen sich auch durch benutzen einer Suchmaschine, z.B. „ip-symcon max execution time“ (ohne Anf.zeichen) bei Google eingeben :eek:

http://www.raketenschnecke.net/2013/03/20/ips-tippstricks-scriptlaufzeiten-in-ip-symcon/

Erklärung und Beispiel für das Skript

Ist es dieses Script:
… einen Ordner rekrusiv in die MediaPlayer Playlist laden?
http://www.ip-symcon.de/service/dokumentation/vorgehensweisen/wie-kann-ich/

Wenn nein, dieses verwenden.

In der PHP ini würde ich die Zeit nich ändern weil dies Global für alles Scripte gilt.

Das ist der bessere Weg:

http://php.net/manual/de/function.set-time-limit.php

Ich verwnde fogendes Script zum Einlesen:

<?
$id_sk = 23681 /[Media Player\Media Player]/ ; //id der mediaplayerinstanz
$pfad = „D:/Test“;
WAC_PlayDir($id_sk,$pfad);

function ReadRecursive($dir, $subdir = „“) {
$result = Array();
$files = scandir($dir."/".$subdir);
foreach($files as $file)
{
if(($file != „.“) && ($file != „…“)){
if(is_dir($dir."/".$subdir."/".$file)) {
$res = ReadRecursive($dir, $subdir."/".$file);
$result = array_merge($res, $result);
} else {
$filedir = $subdir."/".$file;
$filedir = substr($filedir, 1, strlen($filedir));
$result = $filedir;
}
}
}
return $result;
}

function WAC_PlayDir($id, $dir)
{
$allowed = Array(„mp3“, „wma“);
$files = ReadRecursive($dir);

//Den Zufallsgenerator von PHP verwenden
//shuffle($files);

WAC_ClearPlaylist($id);
foreach($files as $file)
{
$ext = pathinfo($dir."/".$file, PATHINFO_EXTENSION);
if(in_array(strtolower($ext), $allowed))
{
WAC_AddFile($id, $dir."/".$file);
}
}
WAC_Play($id);
}
?>

Das Versteh ich nicht ganz:
Das ist der bessere Weg: http://php.net/manual/de/function.set-time-limit.php
muss ich das zusätzlich in das obrige Script einfügen???

Danke

Ja am Anfang, mit der gewünschten max. Scriptlaufzeit.

hmm also so müsst das script aussehen??


<?php

require_once('db.php');

$stmt = $db->query($sql);

 while ($row = $stmt->fetchRow()) {
     set_time_limit(0);
$id_sk = 23681 /*[Media Player\Media Player]*/ ; //id der mediaplayerinstanz
$pfad  = "//A1modem/a";
WAC_PlayDir($id_sk,$pfad);

function WAC_PlayDir($id, $dir)
{
    function ReadRecursive($dir, $subdir = "") {
        $result = Array();
        $files = scandir($dir."/".$subdir);
        foreach($files as $file)
        {
            if(($file != ".") && ($file != "..")) {
                if(is_dir($dir."/".$subdir."/".$file)) {
                    $res = ReadRecursive($dir, $subdir."/".$file);
                    $result = array_merge($res, $result);
                } else {
                    $filedir = $subdir."/".$file;
                    $filedir = substr($filedir, 1, strlen($filedir));
                    $result[] = $filedir;
                }
            }
        }
        return $result;
    }

    $allowed = Array("mp3", "wma");
    $files = ReadRecursive($dir);

    //Den Zufallsgenerator von PHP verwenden
    //shuffle($files);

    WAC_ClearPlaylist($id);
    foreach($files as $file)
    {
        $ext = pathinfo($dir."/".$file, PATHINFO_EXTENSION);
        if(in_array(strtolower($ext), $allowed))
        {
            WAC_AddFile($id, $dir."/".$file);
        }
    }
    WAC_Play($id);
}
?>

set_time_limit(60*5); 

Bedeutet Script darf 5 x 60Sekunden laufen.:wink:

Zeile ganz an den Anfang.

Super funktioniert :slight_smile:
Dieses set_time, belastet das, das ip System?

Ja, ein Script sollte optimal nur wenige ms laufen. Deshalb am besten mit Timern arbeiten.

Danke,
wenn ich dieses Script zum einlesen der Festplatte verwende, dann hohlt sich ja dieses Script Mit (set_time_limit(60*5):wink:
die Daten von der Festplatte und ladet die Dateien in eine art zwischen Speicher? Oder werden die Dateien direkt in die Variable geschrieben?

Somit läuft das Script ja nur einmal? Oder läuft das jedes Mal wenn ich den Song wechsle??

In diesem speziellen Fall werden sehr viele Daten verarbeitet. Hier sollte man sich überlegen besser mit kürzeren Playlistordnern zu arbeiten, so mache ich das.