2 votes

"Le binaire wkhtmltopdf n'est pas trouvé ou n'est pas exécutable" bien que le chemin soit correct sur le serveur CentOS

Je construis une application web en CakePHP et j'y ai intégré une fonctionnalité d'impression PDF en utilisant le plugin CakePdf, ainsi que le binaire wkhtmltopdf.

J'ai effectué des tests approfondis sur ma machine locale, et le code fonctionne et imprime les PDF comme prévu. Cependant, lorsque je télécharge ensuite l'application sur mon serveur web de production, j'obtiens les messages suivants :

Attention (2) : is_executable() [http://php.net/function.is-executable] : restriction open_basedir en vigueur. Le fichier(/usr/bin/wkhtmltopdf) n'est pas dans le(s) chemin(s) autorisé(s) : (/var/www/clients/client1/web1/web:/var/www/clients/client1/web1/tmp:/var/www/gravex.co.uk/web:/srv/www/gravex.co.uk/web:/usr/share/php5:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin) [APP/Plugin/CakePdf/Pdf/Engine/WkHtmlToPdfEngine.php, ligne 82]

Le binaire wkhtmltopdf n'est pas trouvé ou n'est pas exécutable : /usr/bin/wkhtmltopdf

Erreur : Une erreur interne s'est produite. Trace de la pile

APP/Plugin/CakePdf/Pdf/Engine/WkHtmlToPdfEngine.php line 29  WkHtmlToPdfEngine->_getCommand()
APP/Plugin/CakePdf/Pdf/CakePdf.php line 234  WkHtmlToPdfEngine->output()
APP/Plugin/CakePdf/View/PdfView.php line 101  CakePdf->output(string)
CORE/Cake/Controller/Controller.php line 957  PdfView->render(null, null)
CORE/Cake/Routing/Dispatcher.php line 193  Controller->render()
CORE/Cake/Routing/Dispatcher.php line 161  Dispatcher->_invoke(UsersController, CakeRequest, CakeResponse)
APP/webroot/index.php line 96  Dispatcher->dispatch(CakeRequest, CakeResponse)

J'ai vérifié le fichier que le plugin CakePdf utilise pour charger wkhtmltopdf, et ce chemin est le suivant /usr/bin/wkhtmltopdf comme il l'est sur ma machine locale. J'ai vérifié si wkhtmltopdf se trouve au même endroit et c'est le cas. Lors de l'installation de wkhtmltopdf, j'ai simplement extrait le binaire et l'ai placé à l'endroit indiqué, tant sur la machine locale que sur la machine de production.

Que puis-je faire pour régler ce problème ?

UPDATE
En suivant les conseils de stix, j'ai ajouté le chemin d'accès à open_basedir, mais je reçois toujours cette erreur. J'ai ensuite essayé d'exécuter wkhtmltopdf dans le terminal, et j'ai reçu l'erreur "command not found". Cela s'est avéré être que le fichier binaire était corrompu. Depuis, j'ai téléchargé une nouvelle version du fichier binaire et, en utilisant la commande ./wkhtmltopdf le binaire fonctionne. Si toutefois je ne mets pas le ./ avant, je reçois toujours l'erreur.

2voto

mschr Points 5003

Assurez-vous que les fichiers wkhtmlto* sont définis comme exécutables. Étant donné le fait que cela fonctionne si le fichier de positionnement se trouve dans votre Root de documents - et ne fait pas partie des utilitaires de la corbeille du système d'exploitation - Stix est sur quelque chose.

Cause probable de l'absence d'effet sur votre vie. open_basedir est qu'il peut être interdit de le modifier dans les fichiers PHP, mais plutôt dans votre php.ini :

open_basedir=/usr/bin/

Voir http://www.php.net/manual/en/ini.core.php#ini.open-basedir

0voto

stix Points 742

Je n'utilise pas cakephp mais je regarde ce message :

open_basedir restriction in effect

Je pense qu'il teste si le binaire wkhtmltopdf existe et comme open_basedir ne l'autorise pas, il échoue et vous donne l'erreur "wkhtmltopdf binary is not found or not executable : /usr/bin/wkhtmltopdf". Essayez de changer open_basedir pour permettre script l'accès à /usr/bin/wkhtmltopdf

0voto

Mahak Choudhary Points 489

Si votre chemin d'accès est correct, vous devez télécharger la dernière version du programme à partir de https://wkhtmltopdf.org/ et le remplacer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X