PHP GitHub (geändert)

nietaL

NGBler
Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
Hey Leute,

ich habe ein PHP-Skript, das eine Batch-Datei ausführt (exec). Die Batch löscht und erstellt Ordner und läd Inhalte aus dem internet und füttert die Ordner.
Das PHP-Skript darf erst weiterarbeiten, wenn die Batch fertig ist. Dazu wollte ich im PHP-Skript prüfen, ob ein bestimmter Ordner bereits erstellt ist, denn wenn das der Fall sein sollte, weiß ich, dass die Batch durchgelaufen ist.

Wenig überraschend geht es nicht, weil ja das Skript serverseitig interpretiert wird und sicher nicht mehr mittendrin auf Veränderungen im Hintergrund reagieren kann.

Pseudocode:
[src=php]exec('makedir.bat');
$dir_exists = false;
while ($dir_exists == false)
{
if(is_dir('dir1')== true) {$dir_exists = true;}
}[/src]

Warum ist das Blödsinn, was ich mir da gedacht habe? UND Gibt es eine moderate Möglichkeit, das so oder so ähnlich durchzuführen?

Danke :-)
 
Re: PHP prüft Batch-Prozess-Status

Warum überhaupt die Batch?

Ordner erstellen und löschen kannst du auch gleich in PHP.
 
  • Thread Starter Thread Starter
  • #3
Re: PHP prüft Batch-Prozess-Status

Jedes Mal denke ich: Ach passt schon, wenn ich die Hälfte der Information einfach weglasse. :D

Es geht um das Downloaden eine Repositorys von Github. Und dafür hatte ich mir eine Bat geschrieben.
 
Re: PHP prüft Batch-Prozess-Status

Das erklärts dann aber immer noch nicht.

Blind ins blaue geschossen:
Du weisst schon das du PHP auch einfach über die Kommandozeile eusführen kannst?
Es gibt dafür sogar extra Funktionen.
Beispiel:
 
Re: PHP prüft Batch-Prozess-Status



Eventuell wäre es ratsam unter PHP libCurl zu verwenden um die Inhalte zu downloaden von Github:
So fern verfügbar. Generell sollte diese Lib aber zu Verfügung stehen. Ich vermute es ist Standard.

Dann kannst du die Github Quelle per libCurl downloaden (https) und nach dem Download das Bootstrapping ausführen (Ordner befüllen mit den entsprechenden Daten).

Eine "idle" Loop zu schreiben, die auf einen Filedeskriptor wartet/reagiert, verursacht nur unnötige Last. Selbst eine leere Schleife iteriert und wird "aktiv" ausgeführt.
 
  • Thread Starter Thread Starter
  • #6
Re: PHP prüft Batch-Prozess-Status

Eine "idle" Loop zu schreiben, die auf einen Filedeskriptor wartet/reagiert, verursacht nur unnötige Last. Selbst eine leere Schleife iteriert und wird "aktiv" ausgeführt.

Ja, das sehe ich mittlerweile auch so. Das ganze über PHP zu regeln, finde ich auch deutlich besser. Ich habe mich einmal etwas umgesehen und diesen Code-Schnipsel entdeckt. Hier heißt es:



If allow_url_fopen is set to On in the php.ini you can simply use file_get_contents(). No curl is required in this case. I successfully downloaded a master.zip of one of my repositories using:
[src=php]file_put_contents("master.zip",
file_get_contents("https://github.com/metashock/Hexdump/archive/master.zip")
);[/src]

Wenn ich die angegebene URL in den Browser kopiere, kommt sofort die Download-Prompt. Wenn ich dieses Skript genau so ausführe, wird aber lediglich eine master.zip angelegt, die mit 0 byte leer ist. allow_url_fopen ist auf on gesetzt. Kann sich jemand erklären, warum der Schnipsel nicht funktioniert. Er ist so schön einfach.
 
Re: PHP prüft Batch-Prozess-Status

Wenn ich die angegebene URL in den Browser kopiere, kommt sofort die Download-Prompt. Wenn ich dieses Skript genau so ausführe, wird aber lediglich eine master.zip angelegt, die mit 0 byte leer ist. allow_url_fopen ist auf on gesetzt. Kann sich jemand erklären, warum der Schnipsel nicht funktioniert. Er ist so schön einfach.

Fehler? irgendwas? Was sagt die error_log? Denn der Snippet funktioniert, zumindest bei mir(PHP 7.0):
Code:
Expand Collapse Copy
ls -l master.zip
-rw-rw-rw- 1 xxx xxx 16731 Oct 17 22:13 master.zip
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #8
Re: PHP prüft Batch-Prozess-Status

Mhh, es geht bei dir? Dann muss es an meiner Einrichtung liegen... :confused: Trotzdem ist das eine gute Nachricht.

In der Error-Log habe ich das hier gefunden:

[18-Oct-2018 15:09:40 UTC] PHP Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version in C:\Inetpub\vhosts\bla.de\httpdocs\webgui\test.php on line 3
[18-Oct-2018 15:09:40 UTC] PHP Warning: file_get_contents(): Failed to enable crypto in C:\Inetpub\vhosts\bla.de\httpdocs\webgui\test.php on line 3
[18-Oct-2018 15:09:40 UTC] PHP Warning: file_get_contents( failed to open stream: operation failed in C:\Inetpub\vhosts\bla.de\httpdocs\webgui\test.php on line 3

Scheint irgendetwas mit SSL zu tun zu haben. :unknown: Die test.php besteht lediglich aus den 3 o.g. Zeilen Code.

...

Das war's. Danke.
 
Zuletzt bearbeitet:
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version in C:\Inetpub\vhosts\bla.de\httpdocs\webgui\test.php on line 3
Sitzt Du hinter einem Proxy? Irgendein custom Cert-Bundle am Host? Sieht so aus, als könnte da ein anderes Bundle helfen. Lad Dir mal von cURLs Website das Bundle von denen herunter, verschieb das bei Dir ins Verzeichnis zum Script und füge folgendes an den Anfang des Skripts hinzu:

[src=php]$contextOptions = [
'ssl' => [
'verify_peer' => true,
'cafile' => '/pfad/cafile.pem',
'CN_match' => 'github.com',
'ciphers' => 'HIGH:!SSLv2:!SSLv3',
'disable_compression' => true,
],
];
$context = stream_context_create($contextOptions);
[/src]
(ändere bitte vorher auch den Pfad von cafile ab)
Im Prinzip teilst Du file_get_contents mit dem context mit, das Du SSLv2 und SSLv3 verbietest und damit nur TLS erlaubst, und mit verify_peer validierst Du den Server mit dem Du sprichst. Außerdem umgeht man mit der Option disable_compression die CRIME-Attack auf TLS.


und daher füge folgendes in file_get_contents an/ändere sie um, um die Stream-Optionen mitzunehmen, die Du gerade gesetzt hast:
[src=php] file_put_contents("master.zip",
file_get_contents("https://github.com/metashock/Hexdump/archive/master.zip", false, $context)
);
[/src]

---

Das war's. Danke.
Mit welcher Version hast Du denn da hantiert?^^
 
  • Thread Starter Thread Starter
  • #10
Dass ich hinter nem Proxy sitze, wüsste ich nicht. Ist ein vServer von Strato. Aber vielleicht siehh es deshalb so aus?

Deine Ratschläge setze ich gleich um.
Die Standardversion auf dem Server von PHP ist 5.5. Mit zwei klicks auf 7.1 geändert.

Danke an alle!
 
Zurück
Oben