2016-06-17 16 views
0

Ich versuche, PHP PhantomJS zu verwenden, um eine Seite zu laden, aber ich habe den FehlerPHPPhantomJS Laden nicht PhantomJS Modul

Fatal error: Uncaught JonnyW\PhantomJs\Exception\ProcedureFailedException: Error when executing PhantomJs procedure - File does not exist or is not executable: bin/phantomjs in /Volumes/WWW ROOT/namechase/www/vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/Procedure/Procedure.php:138 
Stack trace: 
#0 /Volumes/WWW ROOT/namechase/www/vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/Client.php(162): JonnyW\PhantomJs\Procedure\Procedure->run(Object(JonnyW\PhantomJs\Http\Request), Object(JonnyW\PhantomJs\Http\Response)) 
#1 /Volumes/WWW ROOT/namechase/www/crawling.php(30): JonnyW\PhantomJs\Client->send(Object(JonnyW\PhantomJs\Http\Request), Object(JonnyW\PhantomJs\Http\Response)) 
#2 {main} 
    thrown in /Volumes/WWW ROOT/namechase/www/vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/Procedure/Procedure.php on line 138 

Dies geschieht nur auf einem meiner Testdomänen, und nicht die anderen.

Der Code, den ich auf beiden Domänen ausgeführt habe, ist identisch, funktioniert aber nicht auf einem der beiden Testfelder. Beide werden auf demselben Computer ausgeführt und verwenden nur verschiedene virtuelle Hosts, aber nur einer gibt den Fehler zurück.

require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php'; 

echo '<pre>'; 
use JonnyW\PhantomJs\Client; 

$client = Client::getInstance(); 
$delay = 5; // 5 seconds 

$request = $client->getMessageFactory()->createRequest('https://google.com', 'GET'); 
$request->setDelay($delay); 
/** 
* @see JonnyW\PhantomJs\Http\Response 
**/ 
$response = $client->getMessageFactory()->createResponse(); 

// Send the request 
$client->send($request, $response); 

if($response->getStatus() === 200) { 

    // Dump the requested page content 
    echo $response->getContent(); 
} 

ich den Weg zu phantomjs im

"config": { 
    "bin-dir": "/usr/local/bin" 
} 

mit composer.json Datei Einstellung haben versucht, dies scheint aber keinen Unterschied

Antwort

0

Wenn Sie Composer ausführen, um Ihre Pakete, die installiert werden Das PhantomJS-Installer-Skript ruft PhantomJS ab und installiert es im Ordner /bin des Projekts.

Es wird nie in /usr/local/bin landen, außer wenn Sie es manuell installieren oder verschieben.

Sie erhalten die folgende Fehlermeldung: File does not exist or is not executable: bin/phantomjs.

Zuerst würde ich überprüfen, ob die Datei korrekt abgerufen und in den Ordner bin installiert wurde. (Wenn die Datei nicht im bin-Ordner Ihres Projekts installiert ist, sollte das Installationsskript beim Composer-Lauf einen Fehler anzeigen.)

Zweitens würde ich Dateiberechtigungen überprüfen. Normalerweise kümmert sich das Installationsprogramm darum, aber schauen Sie einfach, ob das ausführbare Flag +x gesetzt ist.