• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Funktion system() funktioniert nur bei gleichem Pfad

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
Das Programm cpbo.exe packt Ordner zu einer pbo-Datei. Dazu bedarf es der untenstehenden Parameter.

Liegt das Skript, die cpbo.exe, der Quellordner (test.Altis) und der Zielpfad (test.pbo) im selben Verzeichnis, funktioniert alles tadellos.

[src=php]system("start /b cpbo.exe -y -p test.Altis test.pbo", $output);
echo $output;
[/src]

Jetzt möchte ich aber das aufrufende Skript eine Ebene höher ablegen. Beim Aufruf kommt nach 60sek ein 500er Fehler.

[src=php]system("start /b missions/cpbo.exe -y -p test.Altis test.pbo", $output);
echo $output;
[/src]

Die Pfade als Parameter für die Exe sind doch sicherlich immer relativ zu EXE anzugeben, bleiben also unverändert. Ich vermute meinen Fehler eher im Pfad zur Exe selbst. Ich hab auch schon versucht absolute Pfade anzugeben. Darf man überhaupt relative Pfade zum auszuführenden Command angeben?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Ich kenne die Software nicht, aber ich würde ganz stark vermuten, das der Aufrufpfad des Programms:
"missions/cpbo.exe" zwar korrekt aufruft,
aber das Programm nicht versteht, das die zu bearbeitenden Daten sich eine Ebene tiefer im Pfad befinden.

Ich glaube, aber dass das Programm es nicht unterstützt wenn du
"../test.Altis ../test.pbo" oder "./test.Altis ./test.pbo"
übergibst um im zu sagen, "schau eine Ebene höher als du selbst liegst... mußt du testen, ich würde aber, aus Sicherheitsgründen, zu 99% verneinen das dies möglich ist :)

Mußt du zwingend diese Struktur mit einer Ebene höher als im anderen Verzeichnis beibehalten?

Normalerweise hätte man ja das Programm in der untersten Ebene und würde ihm Angeben das die Pfade/Daten darunter liegen mit denen gearbeitet wird. Also ums einfacher zu sagen, die Daten die du mit der Software bearbeiten willst, liegen im Programm bzw. Unterordner(n) davon ausgehend.

Ich würde es als Sicherheitsrisiko betrachten wenn eine Software außerhalb Ihres Speicherorts arbeitet. Aber ist vielleicht nur meine naive Meinung. Gerade wenn du etwas mit "system" / "exec" oder "eval" oder ähnlichem übergeben lässt was Code/andere Software ausführt.
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #3
Danke erst einmal für deine Antwort. Aber ich glaube, ich habe mich missverständlich ausgedrückt. Nur das aufrufende Skript liegt eine Ebene höher. Programm und zu bearbeitende Dateien sind auf gleicher Ebene:

Struktur bei ersterem Codebeispiel:

ORDNER 1
- cpbo_starten.php
- cpbo.exe
- test.Altis
- test.pbo (vorhanden, wenn erfolgreich)

Wunschstruktur zweites Codebeispiel

ORDNER 0
- cpbo_starten.php
- ORDNER 1
|-- cpbo.exe
|-- test.Altis
|-- test.pbo (wurde ja leider noch nicht erstellt)

Mir geht es vornehmlich um die Syntax der Pfads, hier dickgedruckt:
system("start /b missions/cpbo.exe -y -p test.Altis test.pbo", $output);

Ist das so richtig? Ist der Slash richtig herum? Muss etwas markiert werden? Fehlen Anführungszeichen? Darf man relative Pfade nehmen? An irgendetwas muss es doch liegen, dass er sich aufhängt.
 

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Versuch mal die Pfade relativ zum PHP-Script anzugeben:
[src=php]system('start /b "missions/cpbo.exe" -y -p "missions/test.Altis" "missions/test.pbo"', $output);[/src]Im Zweifelsfall würde ich aber tatsächlich zu absoluten Pfadangaben tendieren. Dabei kann realpath hilfreich sein.
[kw]/[/kw] brauchst du übrigens auf Linux/Mac-Systemen, [KW]\[/KW] auf Windows-Systemen. Ich nutze da gerne sowas wie: [src=php]define('DS', DIRECTORY_SEPARATOR);
$path = 'folder' . DS . 'test.file';[/src]

Falls du vorhast, dass die Benutzer deiner Seite eigene Dateien verarbeiten können, weise ich schonmal vorsorglich auf escapeshellarg hin ;)
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.505
Ist der Slash richtig herum?
Ist es so hart das selber auszuprobieren? Bin hier nur zufällig reingestolpert, aber warum kein backslash um einen relativen Pfad bei Windows anzugeben?
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #6
@BurnerR: Wäre das meine einzige Frage, hätte ich es ausprobiert. Das wäre mir dann auch nicht zu "hart"... Aber es ergeben sich quasi zig Kombinationsmöglichkeiten. Und bevor ich herumrate, frage ich lieber nach Rat.

@Rakorium-M: Es handelt sich um einen Windows-Server.

[src=php]system("start /b missions\cpbo.exe -y -p missions\test.Altis missions\test.pbo", $output);
[/src]

[src=php]system("start /b missions\cpbo.exe -y -p test.Altis test.pbo", $output);
[/src]

[src=php]system("start /b C:\inetpub\vhosts\XXXXXX.XXXXserver.de\httpdocs\missions\cpbo.exe -y -p test.Altis test.pbo", $output);
[/src]

Alles führt zum Timeout.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Also, vielleicht solltest du mal Raktorium-M s-Variante ausprobieren... ansonsten kommt das Programm vielleicht nicht mit Pfadangaben als Parameter klar, sondern nur mit direkten Dateinamen... ?
Da ließe sich doch bestimmt auf der "Herstellerseite" bzw. in einer Doku etwas finden oder andere Projekte wo das Werkzeug zum Einsatz kommt, anderer Quellcode der vielleicht Public Domain ist. ;)

Und auch als Tip, User Input NIE vertrauen, falls du den Systemaufruf dynamisch zusammenbauen lassen willst. Immer escapen/absichern/Pfade entfernen und nur Dateinamen verwenden et cetera, wie bereits vorgeschlagen. :)
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #8
Danke für den Tip. Es wird keinen UserInput in Textform geben. Dennoch werde ich das Escapen beherzigen!

Ich habe jetzt probehalber das funktionierende "Alles auf einer Ebene"-Skript komplett eine Ebene hochgeschoben. Siehe da: TimeOut. Hieß also, das Skript ist gar nicht schuld. Es waren die Rechte des beinhaltenden Ordners. In diesem Fall hatte Ordner 1 mehr Rechte als Ordner 0. Nun geht es. Danke noch einmal für die Hinweise.

PS: Im Übrigen musste tatsächlich auch der Pfad des Programms angepasst werden. Das verstehe ich zwar nicht wirklich, aber es funktioniert - auch nur mit escapten Backslashes.
[src=php]system("start /b missions\cpbo.exe -y -p missions\\test.Altis missions\\test.pbo", $output);[/src]
 
Zuletzt bearbeitet:

exomo

NGBler

Registriert
1 Aug. 2015
Beiträge
129
PS: Im Übrigen musste tatsächlich auch der Pfad des Programms angepasst werden. Das verstehe ich zwar nicht wirklich, aber es funktioniert - auch nur mit escapten Backslashes.
[src=php]system("start /b missions\cpbo.exe -y -p missions\\test.Altis missions\\test.pbo", $output);[/src]
Auch wenn das Problem zwar gelöst ist, noch ein kleiner Hinweis von mir:
- Pfade werden in aller Regel relativ zum "Aktuellen Arbeitsverzeichnis" (Current diretory) aufgelöst. Wenn ein Programm ein anderes aufruft, wird die Umgebung, also das Arbeitsverzeichnis, Umgebungsvariablen usw. vom Aufrufer übernommen. Wenn nötig kann der Aufrufer das Arbeitsverzeichnis vorher wechseln, z.B. mit chdir("missions"); (und danach wieder zurück), in deinem Fall würde ich das aber vermeiden.
- Windows unterstützt auch den "/" als Pfadtrenner. Bis auf ein paar wenige Programme die damit nicht klarkommen kann man einfach / verwenden statt \ und spart sich dadurch das ständige escapen.
 
Oben