php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Jobs und Projekte > Projekthilfe
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


Projekthilfe Hier könnt Ihr eine Art Projekthilfe anfordern. Unter Projekthilfe verstehen wir Angebote bei denen KEIN Geld gezahlt werden kann.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 5 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 27-09-2008, 16:02
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard PHP Newbie: Zu Testzwecken Ordnerstruktur mit Iteratoren kopierend erzeugen.

Hallo zusammen.
Ich möchte zu Testzwecken eine Ordnerstruktur kopieren und in meinem Testordner erzeugen, wobei alle Dateien, die sich in den Ordnern php befinden, ebenfalls kopiert werden sollen.
Die ausführende Datei befindet sich im Ordner:
C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime
Soweit bin ich schon gekommen:

PHP-Code:
<?php
$root 
getcwd();
$such 'php';
$TestOrdner "C:\\Program Files\\xampp\\htdocs\\SantoDaimePortal\\test5";

$dir_iter = new RecursiveDirectoryIterator($root);
$files = new RecursiveIteratorIterator($dir_itertrue);

foreach (
$files as $file)    {
    
$path $file->getPathname();
    if (
is_file($path))
        continue;
    
$path2 substr ($path,86);    
    echo 
"$path2<br />";
}

?>
Die Ausgabe als Auszug:
Zitat:
C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime\Joao_Pedro\mp3
C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime\Joao_Pedro\php
Jetzt wollte ich mit der Anweisung
PHP-Code:
$path2 substr ($path,86); 
die ersten Ordner abschneiden, so das nur die Ordner übrigbleiben, die auch erzeugt werden sollen, hier also alles nach ...\Santo\Daime\
Ich habe das auch schon mit str_replace versucht aber auch da erfolgte keine Reaktion.
Das echo greift ja auf $path2 zu, die Zuweisung ist also erfolgt, aber keine Bearbeitung mit str_replace oder substr.
Wißt ihr, woran das liegt?

Gruß
Estrela

Edit// War ein kleiner Arbeitsfehler. Habe im Testordner die Datei modifiziert und über Browser die Datei im Arbeitsordner aufgerufen. Kann sich ja nix tun, ne. Sorry

Geändert von Estrela (27-09-2008 um 20:27 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 27-09-2008, 23:26
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo zusammen.
Ich bin jetzt ein wenig weitergekommen.
PHP-Code:
<?php
$root 
getcwd();
$such 'php';
$b '\'; # Backslash wird leider nicht angezeigt
$TestOrdner = '
C:Program FilesxampphtdocsSantoDaimePortaltest5';

$dir_iter = new RecursiveDirectoryIterator($root);
$files = new RecursiveIteratorIterator($dir_iter, true);
$i = 0;
foreach ($files as $file)    {
    $path = $file->getPathname();
    if (is_file($path))
        continue;
    $path2 = substr ($path,86);
    $i= $i + 1;
    #$pfad = ($i.' '.$TestOrdner.$path2."<br>");
    $pfad = ($TestOrdner.$path2.$b);    
    echo $i.' '.$pfad.'
<br>';
    $dir = mkdir ('
$pfad' , '0777' , true);
        if ($dir) {
        echo '
Erledigt!'.'<br>';
    }else {
    echo '
Hat leider nicht geklappt.'.'<br>;
    }
}

?>
Leider bekomme ich jetzt folgende Warnungen (als Auszug):
Zitat:
1 C:\Program Files\xampp\htdocs\SantoDaimePortal\test5\$pfad\

Warning: mkdir() [function.mkdir]: File exists in C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime\3.php on line 24
Hat leider nicht geklappt.
2 C:\Program Files\xampp\htdocs\SantoDaimePortal\test5\Baixinha\
Die Ordner werden also nicht angelegt.
Kann mir jemand sagen, was nicht stimmt?

Gruß
Estrela

Geändert von Estrela (27-09-2008 um 23:57 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 28-09-2008, 19:23
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo zusammen.

Danke für euer geduldiges Schweigen.
Das ein Unterschied zwischen ' und " besteht, war mir ja schon bekannt.
Also hat das erzeugen der Ordner jetzt stattgefunden.
Mache mich jetzt an den Ausnahmeordner php.

Gruß
Estrela
Mit Zitat antworten
  #4 (permalink)  
Alt 29-09-2008, 22:35
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo zusammen.
Ich bin wieder ein wenig weiter gekommen.

PHP-Code:
<?php
$root 
getcwd();
$such 'php';
$b '\'; #Backslash wird leider nicht angezeigt
$TestOrdner = '
C:Program FilesxampphtdocsSantoDaimePortaltest5';

$dir_iter = new RecursiveDirectoryIterator($root);
$files = new RecursiveIteratorIterator($dir_iter, true);
foreach ($files as $file)    {
    $path = $file->getPathname();
    if (is_file($path))
        continue;
    $path2 = substr ($path,86);
    $pfad = ($TestOrdner.$path2.$b);    
    $dir = mkdir ("$pfad" , '
0777' , true);
        if ($dir) {
        echo '
Erledigt!'.'<br>';
    }else {
    echo '
Hat leider nicht geklappt.'.'<br>';
    }
        $path2a = explode ('
Backslash',$path2);# Backslash soll das Zeichen sein,
# wird hier leider nicht angezeigt, darum so reingeschrieben.
        $path3 = end ($path2a);
            if ($path3 == '
php ){
                   if (
$dh opendir($path)) {
                        while ((
$file readdir($dh)) !== false) {
                        echo 
$file"<br>";
                            
copy($file$TestOrdner.$path2);
                        }
                    
closedir($dh);
                }
        }            
}
?>
Leider bekomme ich folgende Fehlermeldung (als Auszug):
Zitat:
Warning: copy() [function.copy]: The first argument to copy() function cannot be a directory in C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime\4.php on line 32
01-Daime-Luz.php
Ich verstehe die Aussage nicht, weil ja das vorlaufende echo anzeigt, das $file eine Datei ist und kein Ordner. $file ist doch als erstes Argument gemeint, oder nicht?
Was sollte ich also verbessern, damit das script läuft?

Gruß
Estrela

Geändert von Estrela (29-09-2008 um 22:48 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 29-09-2008, 23:51
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Du hast das Echo vor dem Copy, darum ist das "01-Daime-Luz.php" schon vom nächsten Durchgang!
Du kannst dir mal is_file ansehen

Btw: Warum mal RecursiveDirectoryIterator und dann wieder opendir? Nicht sehr konsequent.
Mit Zitat antworten
  #6 (permalink)  
Alt 30-09-2008, 18:02
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo PHP-Desaster.

Ich habe die echos etwas anders positioniert:

PHP-Code:
                        while (($file readdir($dh)) !== false) {
                            
copy($file$TestOrdner.$path2); #Line 31
                            
echo $file"<br>";
                            echo 
$TestOrdner.$path2.'<br>';
                        } 
Jetzt habe ich folgende Fehlermeldung:
Zitat:
Warning: copy(01-Daime-Luz.php) [function.copy]: failed to open stream: No such file or directory in C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime\5.php on line 31
01-Daime-Luz.php
C:\Program Files\xampp\htdocs\SantoDaimePortal\test5\Baixinha\Lumiar\php
Zu erkennen ist ja, das die Datei richtig benannt ist und der entsprechende Ordner auch.
Der entsprechende Ordner existiert auch, ist ja vorher erstellt worden.
Zitat:
Btw: Warum mal RecursiveDirectoryIterator und dann wieder opendir? Nicht sehr konsequent.
Wollte mal ein wenig Abwechslung reinbringen.

Aber im Ernst. Wieder verstehe ich die Fehlermeldung nicht: "No such file or directory... "
Das erste echo zeigt, das die Datei vorhanden ist und das zweite, das der Ordner vorhanden ist, also was will er von mir?

Die Hauptaufgabe der Ordnererstellung ist ja erfolgt und ich habe gerade die paar php-Ordner per Hand kopiert, so das die Aufgabe erstmal erledigt ist.
Würde mich trotzdem für zukünftige Aufgaben interessieren, wo der Fehler liegt.

Gruß
Estrela
Mit Zitat antworten
  #7 (permalink)  
Alt 30-09-2008, 20:53
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Aber im Ernst. Wieder verstehe ich die Fehlermeldung nicht: "No such file or directory... "
Das erste echo zeigt, das die Datei vorhanden ist und das zweite, das der Ordner vorhanden ist, also was will er von mir?
Du hast einen Denkfehler. 01-Daime-Luz.php ist zwar die Datei, aber in $path steht der Pfad zum entsprechenden Verzeichnis. D.h. erst durch Kombination beider Elemente kommst du auf den richtigen Dateipfad!
Mit Zitat antworten
  #8 (permalink)  
Alt 30-09-2008, 21:44
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo PHP-Desaster.

Ach so. Du meinst, so währe es richtig:

PHP-Code:
copy($file$TestOrdner.$path2.'Backslash'.$file); #Backslash = Zeichen 
Das bedeutet also, das es nicht reicht, nur den Ordner anzugeben, in den kopiert werden soll, sondern auch den Dateinamen.
Dann besteht also gleichzeitig die Möglichkeit, die Datei umzubenennen.

Aber, habe es gerade ausprobiert mit diesem code
PHP-Code:
                            copy($file$TestOrdner.$path2.'Backslash'.$file);
                            echo 
$file"<br>";
                            echo 
$TestOrdner.$path2.'Backslash'.$file.'<br>'
Dazu die Fehlermeldung
Zitat:
Warning: copy(01-Daime-Luz.php) [function.copy]: failed to open stream: No such file or directory in C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime\5.php on line 31
01-Daime-Luz.php
C:\Program Files\xampp\htdocs\SantoDaimePortal\test5\Baixinha\Lumiar\php\01-Daime-Luz.php
Zu erkennen ist doch jetzt auch, das ein einwandfreier Pfad vorliegt.
Oder habe ich Dich nicht richtig verstanden oder was bleibt noch zu tuen?

Gruß
Estrela
Mit Zitat antworten
  #9 (permalink)  
Alt 30-09-2008, 22:26
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Nein, bei dem Ziel reicht auch die Angabe eines Verzeichnisses. Entscheidend ist deine Eingabe bei der Quelle. Aktuell versucht dein Skript die Datei im aktuellen Verzeichnis zu finden. Du musst dem copy-Aufruf schon mitteilen, wo genau sich die Quelldatei befindet.
Mit Zitat antworten
  #10 (permalink)  
Alt 30-09-2008, 23:00
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo PHP-Desaster.

Ich habe jetzt mit einer Hilfsvariablen $pathc und dirname den Arbeitspfad extraiert:

PHP-Code:
                            copy($pathc.'php\\'.$file$TestOrdner.$path2.'Backslash'.$file);
                            echo 
$file"<br>";
                            echo 
$TestOrdner.$path2.'\\'.$file.'<br>';
                            echo 
$pathc.'BackslashphpBackslash'.$file.'<br>'
Aber leider bleibt die Kernaussage der Fehlermeldung bestehen:

Zitat:
Warning: copy(C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime\Baixinha\Lumiar01-Daime-Luz.php) [function.copy]: failed to open stream: No such file or directory in C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime\5.php on line 33
01-Daime-Luz.php
C:\Program Files\xampp\htdocs\SantoDaimePortal\test5\Baixinha\Lumiar\php\01-Daime-Luz.php
C:\Program Files\xampp\htdocs\SantoDaimePortal\Santo_Daime\religion\heilig\Santo\Daime\Baixinha\Lumiar\php\01-Daime-Luz.php
//Edit Hatte in copy($pathc.'php'.$file noch ein paar Backslash´s vergessen. Jetzt funktioniert alles.


Gruß
Estrela

Geändert von Estrela (30-09-2008 um 23:19 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 30-09-2008, 23:54
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Ist es so nicht einfacher:
PHP-Code:
function deep_copy($quelle,$ziel)
{
  if(!
file_exists($ziel)) mkdir($ziel,0777,TRUE);
  foreach(
glob($quelle.'/*') as $ding)
  {
    
$neuequelle $quelle.'/'.basename($ding);
    
$neuesziel  $ziel  .'/'.basename($ding);
    if(
is_dir($ding))  deep_copy($neuequelle,$neuesziel);
    if(
is_file($ding)) copy($neuequelle,$neuesziel);
  }
}

// testcode
deep_copy('../quellordner','./zielordner'); 
__________________
Wir werden alle sterben
Mit Zitat antworten
  #12 (permalink)  
Alt 01-10-2008, 17:37
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo zusammen.
@ PHP-Desaster.
Wollte mich noch mal bei Dir für die Erweiterung meines Verständnisses bedanken.
Ist ja im "Laufe des Gefechts" ausgeblieben. Ich ging nähmlich implizit davon aus, das, wenn dem Script der Name der Datei bekannt ist, der Befehl copy ebenfalls auf die Datei zugreifen kann, was offensichtlich nicht der Fall ist. Danke dafür.

@ combie.
Was mir an Deinem Code gefällt, ist die einfache Klarheit, die fast schön zu nennen ist.
Die Zeile gefällt mir besonders:
PHP-Code:
if(is_dir($ding))  deep_copy($neuequelle,$neuesziel); 
Einmal wegen der Schreibweise, aber hauptsächlich durch die Darstellung der Rekursion.
Ich habe das Script ein wenig angepasst und dadurch zum laufen bekommen und festgestellt, das alles kopiert wird.
Die "Komplexität" des hier von Uns entwickelten Scriptes entstand ja hauptsächlich dadurch, das eben nicht alles, sondern alle Ordner und zusätzlich alle Dateien im Ordner php kopiert werden sollten, weil nur darin in einem anderen Script operiert werden soll.

Trotzdem ein sehr schönes Beispiel eines PHP Senior´s für einen Newbie, wohin die Reise geht oder gehen kann. Knapp, klar und keine Umwege.

Ich werde mir weiter die Grundlagen aneignen und möchte noch sagen, das ich es didaktisch sehr gut finde, nach der Erarbeitung des Scriptes eine (hier Teil-) Lösung eines Profis zu sehen, weil dadurch das bessere sichtbar wird, studierbar wird und damit dazu beiträgt, besser zu werden. Kann man wohl nicht immer machen, aber kommt gut.
Noch ein Wort zu:
Zitat:
Wir werden alle sterben
Sterben ist nicht gleich Tot. Als sterben wird der Prozess der Entleibung benannt.
Also das, was vorher war, entleibt sich und wird wieder das, was es vorher war plus der Erfahrung, die es mit, in und durch den Leib gemacht hat.
Das was ist, war und sein wird nimmt die Formen an den Orten an, die es ermöglichen, die Erfahrungen zu machen, die vonnöten sind, um die Lektionen zu lernen, die auf der jeweiligen Bewußtseinsstufe zu bestehen sind.

Darum möchte ich an dieser Stelle noch mal all jenen Danken, die es Uns hier ermöglichen, die Lektionen auf diesem Gebiet zu lernen dadurch, das sie ihr Wissen mitteilen und Wir es aufnehmen können.


Gruß
Estrela
Mit Zitat antworten
Antwort

Lesezeichen


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

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:53 Uhr.