GIT-Befehle mit PHP (system, exec, shell_exec) ausführen - Keine Berechtigung(?)

    • Offizieller Beitrag

    Ich verweise mal auf folgenden Beitrag, damit mein Problem erkenntlich wird:



    @seegras
    Danke für deine Antwort.
    which git gibt folgendes aus: /mingw64/bin/git
    Das hatte ich bereits versucht gehabt, jedoch ohne erfolg, ich kann git damit nicht mal von meinem Administrator-Account starten.
    Das System kann den angegebenen Pfad nicht finden,, das kommt dabei raus. Wobei im Git-Bash es wiederum funkttioniert.


    @Slider Es handelt sich um ein HTTP-Request. Läuft ebenfalls, normalerweise, über ein Webhook von GitHub. Ich rufe die Datei aktuell
    manuell auf, das Resultat ist aber das gleiche.


    So ein Problem hatte ich schon damals, als ich eine .exe in einem bestimmten Pfad starten wollte, ebenfalls keine Berechtigungen gehabt.


    Danke für die Hilfsbereitschaft. Gruß.


    // Edit:


    Damit nicht die Frage aufkommt: Es ist ein Windows Server und Git funktioniert einwandfrei, wenn ich alles manuell in die cmd eintippe.

  • Empfehlung meiner seits: Statt es dir via GIT zu holen, zieh dir die Daten über HTTP (die ZIP Datei) und entpacke sie lokal. Mit diesem Prinzip arbeitet in der Firma in der ich aktuell arbeite, das Deployment Script (unter Linux & Windows Servern). Natürlich ist es via git schöner, aber einfacher zu implementieren ist der Weg über HTTP und die zip Datei.

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Windows? =O Ja gut, da kann ich Dir nicht helfen. Ich arbeite nur mit Linux Servern. Die Dateien wuerde ich nicht gezipt aus GitHub laden. Je nach Projekt, sind das schon paar MB die da zusammen kommen. Mit git laedst Du Dir ja nur den diff runter beim git pull und paar Metadaten. Ausserdem macht es bei deinem Projekt (Build Service) vermutlich mehr Sinn als dauernd ein ZIP runter zu laden weil Du vermutlich oft committest und nicht 1x am Tag. Ich sehe keinen Grund, warum das mit zip Archiven einfacher sein soll als einen git pull aufzurufen.


    Aus eigener Erfahrung kann ich Dir sagen, dass ich immer ein Problem hatte ueber HTTP manche Systemcalls auszufuehren (also mit PHP). Vermutlich gibt es da nen Timeout wenns nicht schnell genug geht? Keine Ahnung. Nur eine Vermutung. Hatte solche Probleme immer damals mit 'screen' geloest.

  • Git for windows kommt mit extra tools um das arbeiten mit GIT zu erleichtern, darunter auch MinGW (weshalb du /mingw64/bin/git als Pfad ausgegeben bekommst). Darauf hast du natürlich in PHP so keinen zugriff. Du kannst mal versuchen git.exe direkt via Pfad aufzurufen (Solle irgendwo in C:\Program Files\Git\bin zu finden sein). Wenn das nicht geht musst du vermutlich irgendwie die shell laden, was sicherlich ne scheißarbeit wird. Was @Developer gesagt hat macht da wohl mehr Sinn.

    • Offizieller Beitrag

    Das mit der git.exe hatte ich schon versucht, ich bin mir aber nicht mehr sicher was genau dabei raus kam, war spät in der Nacht.
    Ich versuche das nochmals über die .exe und berichte dann vom Resultat. Danke soweit.


    Edit:


    Habe es grade versucht und weiß nun, was gestern nicht funktioniert hat.


    Ich kann via shell_exec('"C:\\Program Files\\Git\\bin\\git.exe" 2>&1'); git aufrufen und ich erhalte auch die Info-Nachricht, wenn ich keine params angebe.
    Gebe ich jedoch shell_exec('"C:\\Program Files\\Git\\bin\\git.exe" pull 2>&1'); ein, dann lädt die Seite sehr lange (ca 30 sek) bis es dann ein 500 error ausgibt und "gepulled" hat er dann auch nichts.
    Ich befinde mich in der PHP Datei auch im richtigen Pfad.


    Manuell funktioniert es wieder und dauert keine 5 Sekunden.

    • Offizieller Beitrag

    @Vince


    Danke für deinen Beitrag. Leider erhalte ich nichts dadurch.
    Der Seite lädt sehr lange, gibt ebenfalls ein 500 Error aus. Obwohl ich ein time_limit setze lädt er trotzdem sehr lange.
    Habe ich den Output in eine Datei schreiben wollen, wird gar nicht erst aufgerufen. Als ob er bei passthru und co stehen bleibt.


    Ich werde weiterhin versuchen eine Lösung dafür zu finden.


    Edit:


    Ich bin etwas weiter gekommen. Es lag unter anderem an einige Berechtigungen innerhalb der git repo und daran, dass mein SSH Key zwar existiert aber von mir noch nicht benutzt wurde,
    weshalb ich erst gefragt wurde, ob ich mit dem fingerprint dauerhaft eingeloggt bleiben möchte. Die console hat auf eeine Antwort gewartet, deshalb bekam ich ständig ein 500 error.


    Soweit so gut, aber jetzt erhalte ich folgende Fehlermeldung:



    Zitat

    Output: Host key verification failed.
    fatal: Could not read from remote repository.


    Please make sure you have the correct access rights
    and the repository exists.


    Manuell, über den Benutzer von PHP, habe ich Zugriff durch den SSH key und kann auch pullen etc.
    Aber durch PHP selbst nicht. Ich erhalte auch bei ssh -T git@github folgende Meldung:



    Zitat

    Hi Cireyses! You've successfully authenticated, but GitHub does not provide shell acces.

    Ich vermute mal, dass es daran liegen kann? Ich werde zumindest versuchen den Fehler zu beheben, sollte jemand den Fehler können und eine Lösung parat haben, dann würde ich mich darüber freuen.


    Gruß.