Probleme in Zusammenhang mit FTP

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme in Zusammenhang mit FTP

    Guten Tag.

    Ich habe hier eine Frage in Zusammenhang mit FTP

    Mit nem php-script logge ich mich in ein FTP-Account ein und rename x Verzeichnisse. Dann logge ich aus. Danach logge ich wieder ein (im gleichen Script gleich anschliessend) um die namen der renameden Verzeichnisse auszulesen.

    Nun geht das manchmal seine Zeit und das Script bricht nach 30s bei mir ab (wird im Browser-Fenster zumindest so ausgewiesen). Da es ja auch scripts gibt mit ftp-upload usw. (und auch meine renamerein u.U. bei sehr vielen Verzeichnissen länger als 30s dauert), die uploaden und danach die Verifikation des erfolgten Uploads widergeben, und diese Uploads i.A. ja länger als 30s dauern, ist mir nicht ganz klar, wie man diese 30s Sperre umgehen kann.
    Hat jemand einen Tipp?

    Danke für alle Hinweise.

    mfg CHnuschti

    [Editiert von CHnuschti am 23-02-2002 um 07:34]

  • #2
    Das hört sich nach ner Laufzeitbegrenzung für Scripte an.
    Die ist wahrscheinlich auf 30 Sekunden eingestellt.
    ( bei Hosteurope ist das z.B. so )
    Das bedeuted, ein Script bricht nach 30 Sekunden Laufzeit ab, völlig egal was da gerade läuft.
    Leider leider, denn darunter hab ich auch zu leiden.
    Wäre echt froh wenn jemand wüsste ob und/oder wie man sich da vorbeimogeln kann

    [font=comic sans ms]ups, never mind,
    it´s just me[/font]

    Kommentar


    • #3
      Über die php.ini kann die maximale Laufzeit für ein Skript angegeben werden. (Logischerweise, soferne man Zugang auf die php.ini hat und sie administrieren darf)
      php.ini
      Code:
      ;;;;;;;;;;;;;;;;;;;
      ; Resource Limits ;
      ;;;;;;;;;;;;;;;;;;;
      
      max_execution_time = 30 ; Maximum execution time of each script, in seconds

      Kommentar


      • #4
        Es dürfte ziemlich schwer sein, den Provider dazu zu überreden, die max_execution_time in der php.ini zu ändern.
        Aber zum Glück gibt es ja die Funktion set_time_limit. Aber auch die bringt keinen Erfolg, wenn der Provider den safe_mode aktiviert hat. Und das widerum ist sehr wahrscheinlich.

        Dann gibt es immer noch die Methode, das Skript in mehrere Steps zu unterteilen, die halt je maximal 30 Sekunden laufen und dann eine Variable hochzuzählen:
        langzeit.php:
        Code:
        <html><head>
          [b]<meta http-equiv="refresh" content="35; langzeit.php?step=<?=$step?>&broken=1">[/b]
        </head>< body ><?php
          flush();
          ... Skript mit switch-Anweisung für die einzelnen Steps ...
        ?>
        <script language="JavaScript"><!--
          [b]document.href='langzeit.php?step=<?=(1+$step)?>';[/b]
        //--></script></body></html>
        Der Javascript-Code am Ende sorgt dafür, dass nach Beendigung des Steps der nächste Schritt aufgerufen wird.
        Das Meta-Refresh am Anfang liefert zusätzlich den Parameter $broken=1, um anzuzeigen dass der Schritt $step nicht zu Ende gelaufen ist.

        Mit etwas mehr Aufwand kann man auch Teil-Schritte markieren:
        Ein Formular mit hidden-field, dass du mit Hilfe der JavaScript-Funktion window.setTimeout abschickst: <body onLoad="window.setTimeout('document.forms[0].submit()',35000);"><form method="post" action="langzeit.php"><input type="hidden" name="substep" value="0">
        Nach Beendigung jedes Teilschritts gibst du einen JavaScript-Befehl aus, der den Wert des hidden field ändert: document.forms[0].substep.value='<?=$substep++?>';
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Hallo.
          vielen Dank für die kompetente und ausführliche Antworten. Da bleiben ja keine Fragen offen.
          Scheint eine allgemeine Tücke zu sein, die Ausführungsdauer der Scripts.
          Ich hab das fürs erste so gelöst, dass der Script bei mir zuhause auf dem Server läuft, mit set_time_limit (hatte ich nicht "gekannt") entfällt damit das Problem.

          Ohnehin ist aus dem Script auf dem auswärtigen Server nichts draus geworden. Ich hatte das Script für das Renamen via FTP auf dem WAMP bei mir zuhause vollständig "entwickelt", um dann festzustellen, dass wenn das Script auf den auswärtigen Server zur Ausführung hochgeladen wird, dort dann die Fehlermeldung:
          "Fatal error: Call to undefined function: ftp_connect() in ..."
          kommt :-( Ist sicher eine weitere Lehre, die grundsätzlichen Features gleich am richtigen Ort auszuprobieren, bevor weitere Stunden verbraten werden :-)
          Offenbar ist eine Connection vom Server-Innern nach aussen unterbunden.

          Das Renamen via ftp hab nur aus dem Grund gemacht, dass ich damit dem ganzen Permissions-Kram (Stichwort htacces) aus dem Wege gehen kann, was auch soweit erfolgreich ist.

          Meine weitere Frage wäre denn:
          Hab ich womöglich etwas übersehen, so dass besagte FTP-Connection nicht funktioniert? Ich hab das "ganz normale" Beispiel, das im offiziellen php-Handbuch drin ist, verwendet.
          Oder falls nein, lässt sich auf dem auswärtigen Server (ist in meinem Fall ein US-Server) etwas schrauben, damit die FTP-Connection möglich ist? Oder liegt das voraussichtlich auch wieder in den Händen der Server-admins?

          Danke und Gruss CHnuschti

          [Editiert von CHnuschti am 27-02-2002 um 04:31]

          Kommentar

          Lädt...
          X