php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 10-12-2009, 04:43
iBumsti
 Registrierter Benutzer
Links : Onlinestatus : iBumsti ist offline
Registriert seit: Jan 2007
Beiträge: 73
iBumsti ist zur Zeit noch ein unbeschriebenes Blatt
Standard Kopiervorgang zu langsam

Hallo.

Ich versuche mittels "copy" Dateien (über 200) von einem verzeichnis ins andere zu kopieren und gleichzeitig umzubennen.

Nun ist jedoch mein Problem, dass wenn ich die Seite aufrufe, in welcher ich die Copyfunktion reinprogrammiert hat, das Script selbst so schnell ist, aber kopiervorgang langsamer, und somit statt alle 250 files nur z.b. 90 files kopiert werden.

Gibt es hier bessere Lösunsansetzte als das copy?
Oder auch gleichzeig schnellere?
Mit Zitat antworten
  #2 (permalink)  
Alt 10-12-2009, 04:49
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Die copy-Funktion ist synchron. Wenn der Interpreter sie ausführt, wartet er, bis sie fertig ist. Erts dann wird weiterer PHP-Code ausgeführt. Was du da schilderst, kann also nicht wahr sein oder ich habe dich falsch verstanden.
Mit Zitat antworten
  #3 (permalink)  
Alt 10-12-2009, 05:54
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

wenn du Daten verschiebst, geht es schneller, aber ich denke mal, du wirst die Originale auch noch brauchen, sonst hättest du ja nicht copy genommen. Daher: Nein, viel schneller wird es nicht.

Werden nur 90 Dateien kopiert, weil dann die maximale Skriptlaufzeit erreicht ist? Das kannst du verhindern, indem du nach jedem copy-Aufruf
PHP-Code:
set_time_limit(60); 
aufrufst. Damit kannst du die Skriptlaufzeit immer wieder auf eine weitere Minute verlängern.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #4 (permalink)  
Alt 10-12-2009, 13:23
iBumsti
 Registrierter Benutzer
Links : Onlinestatus : iBumsti ist offline
Registriert seit: Jan 2007
Beiträge: 73
iBumsti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@ onemorenerd

Ist jedoch so...
Ich frag nach jedem Copyvorgang ifexist $filename, wo mir bei fasst allen geschrieben wird "Gibt es noch nicht".
Erst wenn ich den Code mit sleep(1) stoppe, bekomme ich die Meldung, dass das $filename nun existiert.

Somit kann deine Aussage mit "Erts dann wird weiterer PHP-Code ausgeführt" nicht stimmen.

Ich denke, dass er kopiert, und der anschließende Code nicht abwartet, ob es nun wirklich schon kopiert wurde. (was schön wäre)
Sonst würden mir nicht so viele Datein verloren gehen.

Zudem habe ich genau darunter ein insert, welches in die DB den Namen der Datei einträgt.
Hier bekomme ich (wenn ich ein Count über die Tabelle lege) die gleiche Anzahl an Zeilen zurück, wie Files zu kopieren gewesen wären, was wiederum mit dem Ordner wo die kopien abgelegt wurden nicht übereinstimmt.
Sprich: (vorlangenordneranzahl == db_count) != kopierordneranzahl

Bekräftigt meine Meinung...
Copy wartet nicht bis die Datei wirklich kopiert wurde, sonder führt Code einfach aus.
Ist Kopiervorgang zu langsam gewesen... Pech und er mach einen neuen Kopiervorgang...
Datei kommt nicht mehr nach

Wenn ich jedoch jedesmal den Code mit sleep(1) stoppe, schaff ich in einer Stunde max 3600 Datei.
Viel zu langsam, wenn mir diese Menge Pro Sekunde passieren könnte.

@ AmicaNoctis

Die Originale sind mir egal, wenn ich damit zu 1000% garantieren kann, dass alle in dem Ordner verschoben und umbenannt wurden.
Wobei ich hier sogar, selbst wenn Sie nicht umbenannt wären, im Anschluss noch einmal Prüfen könnte und nochmals versuchen könnte mit einem anderen Namen zu versehen.
Ich lösch so oder so im Anschluss (wenn alles geklappt hat) die Files aus dem Vorlagenordner.

Nur wie mach ich das...
Move denk ich mal klingt gut aber falsch.
Da komm ich immer nur in Foren wo wiederum steht, so wie ich es mache... Zuerst copy dann unlink.

Oder meinst du rename?
Würde das dann so funktionieren:
PHP-Code:
rename("./vorlangenordner/$old_filename""./zielordner/$new_filename"); 
P.S. set_time_limit(60); Ist ein Wertvollerhinweis, welchen ich wo anders noch brauchen kann
Vielen Dank!
Mit Zitat antworten
  #5 (permalink)  
Alt 10-12-2009, 17:07
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von iBumsti Beitrag anzeigen
Ich frag nach jedem Copyvorgang ifexist $filename, wo mir bei fasst allen geschrieben wird "Gibt es noch nicht".
Erst wenn ich den Code mit sleep(1) stoppe, bekomme ich die Meldung, dass das $filename nun existiert.
Glaub mir, copy returned erst wenn es fertig ist. Fertig heißt, es hat vom Filesystem eine Bestätigung oder Fehlermeldung erhalten.
Ich weiß nicht, was du mit ifexist meinst. file_exists()? Dann wäre statt sleep vielleicht clearstatcache angebracht.

Zeig mal den Codeabschnitt, mit dem du kopierst.

Übrigens wäre rename wirklich passender als copy. Kehrt übrigens auch erst zurück wenn es fertig ist. Löst also dein Problem nicht, erspart dir aber unlink-Operationen.
Mit Zitat antworten
  #6 (permalink)  
Alt 10-12-2009, 20:01
iBumsti
 Registrierter Benutzer
Links : Onlinestatus : iBumsti ist offline
Registriert seit: Jan 2007
Beiträge: 73
iBumsti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nein
rename kann gut verschieben... Aber sobald ich wie bei Copy einen Namen verändere, gibts wieder probleme.

1 zu 1 kopieren oder verschieben, funktiontioniert super... Aber so nicht:

edit:
"Versuch es so:
Erzeuge 4000 PDF Datein und versuch sie zu kopieren und gleichzeitig einen anderen namen zu verpassen, ob bei dir alles funktioniert.";

PHP-Code:
// Von wo nach wohin soll kopiert werden?
$copy_from_order "./test";
$copy_in_order "./../../pdf";

$verzeichnis openDir("./test"); // Öffnet ein Unterverzeichnis mit dem Namen "test"
    
while ($file readDir($verzeichnis)) { // Verzeichnis lesen
        
if ($file != "." && $file != "..") { // Höhere Verzeichnisse nicht anzeigen!
            
if ((strstr($file".pdf")) OR (strstr($file".PDF"))) { // Dateityp filtern. Es werden nur .pdf-Dateien angezeigt
                
$name explode("."$file);  // Dateiendung vom Dateinamen filtern
                
                
$trenne_file=explode(".",$file); // Datei wird von ".PDF" getrennt
                
$filename=$trenne_file[0];
                
$pdftyp=$trenne_file[1];

                
$trenne_filename=explode("_",$filename); // Dateiname wird aufgespittet
                
$zusatz_id=$trenne_filename[0];
                
$userid=$trenne_filename[1];
                
$tbo_id=$trenne_filename[2];
                
$saftycode=$trenne_filename[3];

                
$timestamp time ();
                list(
$usec,$sec) = explode(    " "microtime());
                
$millisec substr("$usec"2, -2);
                
                
$gencode "$timestamp$millisec";
                
$c_site_code md5($gencode);
                
$site_code=$c_site_code;
                
$pdftimestamp=md5($c_site_code+1111);
                
$site_code_file="$pdftimestamp.pdf";
                        
                    
                
// Kopiere die Datei
                
if (copy("$copy_from_order/$file""$copy_in_order/$site_code_file")) {
                    
// sleep(0.5);
                    
echo "Kopiert";
                    
mysql_query("
                        INSERT INTO `tabelle` (
                            `id`, 
                            `userid`, 
                            `zusatz_id`, 
                            `tbo_id`,
                            `site_code`
                        )VALUES(
                            '', 
                            '$userid', 
                            '$zusatz_id', 
                            '$tbo_id', 
                            '$saftycode'
                        )
                    "
);
                    if (
file_exists($filename)) {
                                            
                        
// Lösche die Datei
                        
if (@unlink("$copy_from_order/$file")) {
                            echo 
"Gelöscht";
                        } else {
                            echo 
"Fehler beim Löschen!";
                        }
                        
                        echo
" <b>--> Alles OK</B>";
                    } else {
                        echo
" <b>--> NICHT GUT NOCHMAL</B>";
                        if (
copy("$copy_from_order/$file""$copy_in_order/$site_code_file")) {
                            echo 
"Kopiert";
                        }else{
                            echo 
"Fehler beim Import!";
                    }

                    
                }else{
                
// Nichts machen...
                
}
            }
        }
    }
closeDir($verzeichnis); // Verzeichnis schließen 

Geändert von iBumsti (10-12-2009 um 20:05 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 10-12-2009, 22:33
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von onemorenerd Beitrag anzeigen
Übrigens wäre rename wirklich passender als copy. Kehrt übrigens auch erst zurück wenn es fertig ist. Löst also dein Problem nicht, erspart dir aber unlink-Operationen.
Erspart auch (unter normalen Umständen) das Umkopieren der Dateiinhalte.
Statt KB- oder gar MB-weise erst umzukopieren, braucht eine Umbenennung nur einen FAT-Eintrag umhängen/neu schreiben, und kann die Daten dabei an Ort und Stelle belassen. Das dürfte sich bei entsprechender Menge an Operationen auch in der Geschwindigkeit bemerkbar machen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #8 (permalink)  
Alt 11-12-2009, 03:10
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Was $filename wohl enthält, wenn es file_exists() übergeben wird?
Mit Zitat antworten
  #9 (permalink)  
Alt 11-12-2009, 13:47
iBumsti
 Registrierter Benutzer
Links : Onlinestatus : iBumsti ist offline
Registriert seit: Jan 2007
Beiträge: 73
iBumsti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von onemorenerd Beitrag anzeigen
Was $filename wohl enthält, wenn es file_exists() übergeben wird?
Da hast du wohl recht.

Löst aber immer noch nicht mein generelles Problem, dass ALLE DATEN tatzächlich teilweise gar nicht kopiert wurden / werden bzw. gilt dies auch für die Funktion rename. (schon probiert)

Wenn ich mit rename die Daten verschiebe und umbenenne, habe ich den Effekt, dass er mir weit mehr als mit copy abarbeitet jedoch nach rund 100 - 600 Datein abbricht.
Error sagt aus, dass es den Namen schon einmal gibt.
Kann doch gar nicht sein?!?!
Ich hab als Dateinamen md5 UND timestemp + millisec ganz ganau.
So schnell kann nie im Leben etwas abgearbeitet werden.
Zur Info $millisec = substr("$usec", 2, -2);
Die letzten zwei Zeichen sind eh immer 00 daher -2


Wenn ich jedoch hergehe, und die Daten nur verschiebe, läuft alles perfekt.

Meine Schlussfolgerung:

Entweder gibts doch noch eine Lösung dafür
ODER
ich muss die zwei Schritte dann leider einzeln durchführen lassen.
Das funktioniert auch, wenn man das Script oft laufen lässt.
Mit einer Schleife die Prüft ob ein Fehler kam und wenn ja wiederholen eigentlich kein Problem.

Nachteil:
Ein weiterer Cronjob und ein weiteres Kriterium auf welches geachtet werden muss und..
Der Ordner PDF wird immer größer daher wird bei mein Plan (wenn es so sein muss) die Auslastung immer höher, weil immer alles Überprüft werden muss.

Daher:
1) Script ausführen und ohne umbenennung verschieben.
2) Verschobene Objekte im Nachhinein umbenennen solange bis keine Datei mehr einen _ hat.
= if _ trifft zu dann umbenennen.

Bei 1.000.000 Daten dann echt schlimm

ODER

1) Script1 --> ausführen und ohne umbenennung verschieben in einem Zwischenordner
2) Script2 --> Zwischenordner alle Daten umbenennen und...
3) Script3 --> Verschiebe alle umbenannten Datein.

3 Cornjobs die ich mir eigentlich ersparen wollte, aber anscheinend die sicherste Variante sind.

Andere Vorschläge oder Lösungsansätze?

EDIT P.S.: Werde auch in Zukunft mit RENAME arbeiten.
Script schon so angepasst, da es eindeutig Vorteile hat, nicht zu kopieren.
Allein schon die CPU Auslastung hat mir überzeugt

Geändert von iBumsti (11-12-2009 um 13:50 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 11-12-2009, 14:57
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von iBumsti Beitrag anzeigen
Error sagt aus, dass es den Namen schon einmal gibt.
Kann doch gar nicht sein?!?!
Die Frage ist in solchen Fällen für mich immer: Investiere ich mehr Zeit in meine "kann doch gar nicht sein"-Überlegung - oder glaube ich PHP/dem OS das einfach mal, und schaue mich nach einer passenderen Lösung um ...?

Zitat:
Ich hab als Dateinamen md5 UND timestemp + millisec ganz ganau.
So schnell kann nie im Leben etwas abgearbeitet werden.
Da würde ich mir gar nichts selber für basteln, sondern gleich uniqid für nutzen. In diesem Falle noch mit dem more_entropy-Parameter auf true, da Millisekunden ja ggf. problematisch werden können.

Zitat:
Wenn ich jedoch hergehe, und die Daten nur verschiebe, läuft alles perfekt.
Wie, ich dachte du nutzt jetzt schon rename, und bekommst dabei das Problem? Was sonst, wenn nicht rename, verstehst du jetzt unter "verschieben"?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #11 (permalink)  
Alt 12-12-2009, 01:16
iBumsti
 Registrierter Benutzer
Links : Onlinestatus : iBumsti ist offline
Registriert seit: Jan 2007
Beiträge: 73
iBumsti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

zu Teil 1:
Da hast du Recht und das war eigentlich eine allgemeine Frage ob das überhaupt sein kann.
Welche ich wenn ich den Tipp aus Teil 2 gekannt hätte, gar nicht gebraucht hätte (vermute ich, muss ich aber erst testen).
Hab mir das mal angeschaut, anhand deines Links und finde es ein gute Lösung.
Schade nur, dass ich die investierte Zeit nicht wieder bekomme.

Zu Teil 2:
Wie gesagt... Kannte ich nicht... anke:

Zu Teil 3:
Nein hätte ich eigentlich nicht so verstand, dachte aber auch das ich was besseren belehrt wurde.
Was stimmt nun?

Ich hätte unter RENAME auch RENAME sprich umbenennen verstanden.
Eigentlich habe ich nach etwas wie move gesucht.
Konnte hier jedoch nichts brauchbares finden

Und ja.. Ich benutze schon RENAME im Test,
Ja... Macht auch Probleme wie Copy...
ABER... weniger als bei der Copyfunktion.

Ich vermute, dass wenn es etwas wie MOVE und oder SHIFT gibt, ich auch nur dass damit machen kann, und es nicht für eine gleichzeitige Namensänderung gemacht wurde.
Daher ist RENAME doch eine gute Lösung oder?

Wenn nein... Ich hab echt beide Augen offen und bin für neues und besseres zu haben
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
readfile() langsam? Edlly PHP Developer Forum 16 21-05-2009 07:48
so langsam... Kropff Out of Order 25 17-01-2006 10:39
php langsam? Vanse Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 6 05-09-2004 16:43
Datenbank ist zu langsam Burni SQL / Datenbanken 1 09-12-2003 23:28
zu langsam ? syco23 PHP Developer Forum 3 26-07-2003 20:42

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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:47 Uhr.