SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten
Hilfe Community Kalender Heutige Beiträge Suchen

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 11.03.2003, 23:07:00
Benutzerbild von markusschmitt
markusschmitt markusschmitt ist offline
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($openftp_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
Mit Zitat antworten
  #2  
Alt 12.03.2003, 08:09:46
Greg G Greg G ist offline
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
Mit Zitat antworten
  #3  
Alt 12.03.2003, 11:55:16
Benutzerbild von markusschmitt
markusschmitt markusschmitt ist offline
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($openftp_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($openftp_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 12:03:46 Uhr)
Mit Zitat antworten
  #4  
Alt 12.03.2003, 13:29:06
Greg G Greg G ist offline
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
Mit Zitat antworten
  #5  
Alt 12.03.2003, 13:48:11
Benutzerbild von markusschmitt
markusschmitt markusschmitt ist offline
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($openftp_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
Mit Zitat antworten
  #6  
Alt 12.03.2003, 14:14:10
Greg G Greg G ist offline
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
Mit Zitat antworten
  #7  
Alt 12.03.2003, 14:35:39
Benutzerbild von markusschmitt
markusschmitt markusschmitt ist offline
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
Mit Zitat antworten
  #8  
Alt 12.03.2003, 14:43:36
Greg G Greg G ist offline
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
Mit Zitat antworten
  #9  
Alt 12.03.2003, 16:28:29
Benutzerbild von markusschmitt
markusschmitt markusschmitt ist offline
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 16:42:05 Uhr)
Mit Zitat antworten
  #10  
Alt 13.03.2003, 01:34:47
Benutzerbild von markusschmitt
markusschmitt markusschmitt ist offline
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
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:07:38 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt