Also habe ich ein PHP-Skript, das wget
zum Herunterladen einiger Bilder verwendet wird. Es sieht ungefähr so aus:
exec('wget -O saveImage.png http://location.of.image');
Wenn ich mein Skript auf einem anderen Computer ausführe, funktioniert es. Wenn ich es jedoch lokal ausführe, funktioniert es nicht. Ich denke, das hat damit zu tun, wie ich installiert habe wget
. Vor Ort verwende ich Mac OS X 10.6 Snow Leopard und installiere es wget
mit Homebrew . Also , wenn ich laufen which wget
(wie mich) , um die Lage von wget
IS /usr/local/bin/wget
(das ist ein symbolischer Link auf das Homebrew Keller ist). Ich habe festgestellt, dass der Benutzer, der das Skript ausführt, aufgerufen wird daemon
. Ich weiß, dass das wget
Skript der staff
Gruppe gehört und ich glaube nicht, dass der daemon
Benutzer Teil dieser Gruppe ist (aber ich weiß nicht, wie ich das überprüfen soll). Wie auch immer, ich glaube nicht, dass der daemon
Benutzer die Berechtigung zum Ausführen des Befehls hat und / oder das Skript nicht finden kann. Was soll ich machen?
Update: So konnte ich das Skript ausführen, als ich den genauen Speicherort angab:
exec('/usr/local/bin/wget ...etc');
Dies lässt mich glauben, dass es sich nicht um ein Berechtigungsproblem handelt, sondern vielmehr um ein Problem, bei dem wget nicht gefunden werden kann. Ich glaube nicht, dass ich den genauen Speicherort angeben kann, da er auf den verschiedenen Computern, auf denen dieses Skript ausgeführt wird, unterschiedlich ist. Was soll ich also tun, um dieses Problem zu umgehen?
Lösung:
Durch Hinzufügen /usr/local/bin
der Umgebungsvariablen $PATH
konnte PHP wget finden. So habe ich es in PHP gemacht:
//help PHP find wget since it may be in /usr/local/bin
putenv('PATH=' . getenv('PATH') . PATH_SEPARATOR . '/usr/local/bin');
if (exec('which wget') == null) {
throw new Exception('Could not find wget, so image could not be downloaded.');
}
//now we know wget is available, so download the image
exec('wget ...');