CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
12.03.2003, 00:07:00
|
|
Anfänger
|
|
Registriert seit: Feb 2003
Beiträge: 70
|
|
Problem mit einer Funktion
Also nach dem des was ich bisher gemacht hat nur mist ausgibt hab ich mich dazu überwunden eine rekursive Funktion zu schreiben allerdings versteh ichs nicht so richtig. Hab bisher das:
PHP-Code:
function rekursiv($nlist)
{
$nlist = ftp_nlist($open, ftp_pwd($open));
for($i =0; $i < sizeof($nlist); $i++)
{
$verz = ftp_pwd($open);
fwrite($fx, "<a href=ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]>[url]ftp://[/url]$benutzername:$passwort@$servername:$port$verz/$nlist[$i]</a>"."n");
$size = ftp_size($open, "nlist[$i]");
if ($size == "-1") // ist der returnwert von $size = "-1"? Wenn ja dann Verzeichnis. Wenn nicht eine Datei.
{
ftp_chdir($open, $nlist[$i])
rekursiv($nlist);
}
}
}
Ich bekomm ne Fehlermeldung wenn ich die Datei aufruf für die Zeile: "rekursiv($nlist);"
Des weiteren versteh ich nicht so richtig von was ich die Funktion abhängig machen muss also von $nlist oder $nlist[i] oder was anderes?
Es soll jedes Verzeichnis durchlaufen werden. Wie ruf ich die Funktion aus meinem Haupcode aus? Geht das so?
rekursiv($nlist);
oder muss ich davor $nlist noch Hauptcode definieren oder reicht das aus?
Mfg Markus
|
12.03.2003, 09:09:46
|
Anfänger
|
|
Registriert seit: Feb 2003
Ort: Hessen
Beiträge: 116
|
|
Ich kenn mich mit den FTP-Befehlen nicht aus. Aber vielleicht kann ich dir ein paar Hinweise geben:
Wenn du die Funktion mit dem Argument $nlist aufrufst, und dann das Argumant in der ersten Zeile der Funktion wieder überschreibst, kannst du es auch ganz weglassen.
Das ist wohl nicht gemeint, das Argument $ordner müsste irgendwie der aktuelle Verzeichnisname sein. Dahin müsstest du dann in der ersten Zeile chdir($ordner) machen.
Nach dem rekursiven Aufruf der Funktion rekursiv($ordner . "/". $unterordner); oder so ähnlich, wirst du wahrscheinlich nochmal chdir($ordner) machen, da die ftp-Funktionen sich nicht merken, in welcher Rekursionsebene deines Programms sie sind.
Der Fehler den du kriegst, dürfte das fehlende Semikolon in der Zeile vor rekursiv($nlist) sein.
Am besten gibst du hier immer auch an, was für eine Fehlermeldung ausgegeben wird, anstatt
Ich bekomm ne Fehlermeldung wenn ich die Datei aufruf für die Zeile: "rekursiv($nlist);"
Dann kann man dir schneller helfen.
GG
|
12.03.2003, 12:55:16
|
|
Anfänger
|
|
Registriert seit: Feb 2003
Beiträge: 70
|
|
Du meinst also ich sollte das vom Pfad und den Unterverzeichnis abhängig machen also so inetwa
PHP-Code:
function rekursiv($ordner."/".$unterordner)
{
$nlist = ftp_nlist($open, ftp_pwd($open));
for($i =0; $i < sizeof($nlist); $i++)
{
$verz = ftp_pwd($open);
fwrite($fx, "<a href=ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]>ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]</a>"."n");
$size = ftp_size($open, "nlist[$i]");
if ($size == "-1") // ist der returnwert von $size = "-1"? Wenn ja dann Verzeichnis. Wenn nicht eine Datei.
{
ftp_chdir($open, $nlist[$i]);
$ordner = ftp_pwd($open);
$unterordner = ftp_nlist($open, ftp_pwd($open));
rekursiv($ordner."/".$unterordner);
}
}
}
Nochmal zum alten Code. Für die Zeile mit dem Funktionsaufruf im Hauptcode
PHP-Code:
$suchname = $suche. ".txt";
touch($suchname);
$fx = fopen ($suchname "a");
rekursiv($nlist); //für die Zeile bekomm "Parse error: parse error in C:apachehtdocsftpindex12.php on line 170"
fclose(fx);
Wenn des sich die Stelle nicht merken kann dann durchläuft er mit doch nicht alle Verzeichnisse oder ist das jetzt mit $ordner."/.$unterordner erledigt weil ich da dann immer andere Verzeichnisse hab und der Pfad ist auch immer anderst?
Nochwas ich habs jetzt mal abgeändert und gespeichert aber bekomm für die function rekursiv($ordner."/".$unterordner) ne Fehlermeldung. '/' geht auch nicht also ich denk mal das ich den / weglassen muss aber das wäre ja denk ich mal nicht so schlimm.
Mfg Markus
Geändert von markusschmitt (12.03.2003 um 13:03:46 Uhr)
|
12.03.2003, 14:29:06
|
Anfänger
|
|
Registriert seit: Feb 2003
Ort: Hessen
Beiträge: 116
|
|
Die Definition der Funktion soll nur eine Variable annehmen.
PHP-Code:
function rekursiv($verz)
{
global $open;
$nlist = ftp_nlist($open, $verz);
for($i =0; $i < sizeof($nlist); $i++)
{
fwrite($fx, "<a href=ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]>ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]</a>"."n");
$size = ftp_size($open, "nlist[$i]");
if ($size == "-1") // ist der returnwert von $size = "-1"? Wenn ja dann Verzeichnis. Wenn nicht eine Datei.
{
rekursiv($verz."/".$nlist[$i]);
}
}
}
Nimms bitte nicht wortwörtlich, sondern schau halt, wie es passt. Sind sicher auch bugs drin.
Wie du globale Variablen ansprichst musst du noch mal nachsehen, weiß nicht, ob das mit global $open so klappt.
Außerdem müssen die übrigen Variablen
$benutzername:$passwort@$servername
usw. ja auch global sein.
Aufruf aus dem Hauptprogramm mit rekursiv("/das/ist/mein/Pfad");
GG
|
12.03.2003, 14:48:11
|
|
Anfänger
|
|
Registriert seit: Feb 2003
Beiträge: 70
|
|
Ups was mach ich denn, bin ich jetzt total bescheuert?
Bitte sagt nicht Ja ;)
PHP-Code:
<?php
set_time_limit(120);
if ($suche)
{
//---------------Funktionsbeginn------------------
function rekursiv($ordner)
{
$nlist = ftp_nlist($open, ftp_pwd($open));
for($i =0; $i < sizeof($nlist); $i++)
{
$verz = ftp_pwd($open);
fwrite($fx, "<a href=ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]>ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]</a>"."n");
$size = ftp_size($open, "nlist[$i]");
if (@ftp_chdir($open, "nlist[i]"))
{
$ordner = ftp_pwd($open);
//$unterordner = ftp_nlist($open, ftp_pwd($open));
rekursiv($ordner);
}
}
}
Des würde doch überhaupt nicht funktionieren so weil $unterordner ein Array ist und und ich keine spezielles Element daraus benannt hab also müsste ich rein von $ordner ausgehen.
Die Variablen benutzername usw. sind im Hauptcode so benannt:
PHP-Code:
global $servername,$benutzername,$passwort,$port,$open;
Bekomm aber trotzdem für die Zeile eine Fehlermeldung!
PHP-Code:
...
$fx = fopen ($suchname "a");
rekursiv($ordner); //hier kommt parse error
fclose(fx);
...
Ich hab rekursiv($ordner); schon mal mit // weggemacht aber selbst dann sagt er mir für die Zeile ein parse error aus
Des gibts doch nicht
Mfg Markus
|
12.03.2003, 15:14:10
|
Anfänger
|
|
Registriert seit: Feb 2003
Ort: Hessen
Beiträge: 116
|
|
bei fopen fehlt das Komma.
Wenn du das so machen willst (mit ftp_pwd) brauchst du wahrscheinlich gar keinen Parameter.
Also ist der Aufruf und die Deklaration
rekursiv();
Du musst dann nur im Hauptprogramm in das richtige ftp-Verzeichnis gehen.
Und dann entweder
PHP-Code:
if (@ftp_chdir($open, "nlist[i]"))
{
rekursiv();
ftp_chdir($open, "..");
}
um wieder aus dem Unterverzeichnis rauszuspringen, oder das ftp_chdir($open, "..");
ganz am Ende deiner Funktion.
GG
|
12.03.2003, 15:35:39
|
|
Anfänger
|
|
Registriert seit: Feb 2003
Beiträge: 70
|
|
"Du musst dann nur im Hauptprogramm in das richtige ftp-Verzeichnis gehen. "
Ich will eigentlich aus dem root Verzeichnis alle Dateien und Unterverzeichnisse samt den dort enthaltenen Dateien alle auslesen. Deshalb hab ich zumindest gedacht das ich das vom Pfad in dem ich bin abhängig machen muss. Eigentlich ist es so gedach das sich die Funktion aufteilt also
| ("|" ist das root)
|
|--Hauptverzeichnis 1
| |- Datei 1.1
| |- Datei 1.2
|
|
|--Hauptverzeichnis 2
| |- Unterverzeichnis 2.1
| | |- Unterverzeichnis 2.1.1
| | | |-Datei 2.1.1.1
| | |- Unterverzeichnis 2.1.2
| | | |- Datei 2.1.2.1
| | | |- Datei 2.1.2.2
| |- Unterverzeichnis 2.2
| | |-Datei 2.2.1
| |- Datei 2.1
....
Es soll also in jedes Verzeichnis rein gehen. Zum Beispiel er soll mir das Unterverzeichnis von Hauptverzeichnis 2 Auslesen das wäre dann Unterverzeichnis 2.1 und Unterverzeichnis 2.2 . Als nächstes soll er mir dann das Unterverzeichnisse von 2.1 und 2.2 auslesen also beide und nicht nur das erste (2.1). So hab ich mir das eigentlich gedacht und daher von $ordner abhängig gemacht.
Mfg Markus
|
12.03.2003, 15:43:36
|
Anfänger
|
|
Registriert seit: Feb 2003
Ort: Hessen
Beiträge: 116
|
|
Dann verstehe ich nicht, warum du andererseits immer ftp_pwd verwenden willst, wenn du gleichzeitig noch den Ordner übergeben möchtest??
GG
|
12.03.2003, 17:28:29
|
|
Anfänger
|
|
Registriert seit: Feb 2003
Beiträge: 70
|
|
Deshalb wollte ich ja das Verzeichnis und der Ordner angeben.
Der bisher in $nlist[i] steht.
Was man machen könnte wäre innerhalb der If und vor dem Aufruf der Funktion.
$unterordner = $nlist[i];
und dann der Aufruf mit
rekursiv($ordner, $unterordner);
Wäre das jetzt eine Lösung meines Probs?
Mfg Markus
Geändert von markusschmitt (12.03.2003 um 17:42:05 Uhr)
|
13.03.2003, 02:34:47
|
|
Anfänger
|
|
Registriert seit: Feb 2003
Beiträge: 70
|
|
OK habs geschafft. Das Verzeichnis sowie alle Unterverzeichnisse werden aufgelistet. Morgen Früh oder Mittag mach ich mich an das Suchskript. Mal sehen wies läuft und ich das anpacke. Wenn alles läuft schreib ich ein Tut da so was bisher noch nicht existiert.
Mfg Markus
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 01:52:18 Uhr.
|