我正在尝试在我的Synology NAS上通过命令行执行一个PHP脚本。在Web浏览器中它工作得很好。但是,通过CLI我遇到了一个错误,尽管我已经在/etc/php/php.ini
加载了扩展。
致命错误:在/volume1/web/blabla.php的第16行,未捕获的PDOException:找不到驱动程序
有什么想法吗?
我正在尝试在我的Synology NAS上通过命令行执行一个PHP脚本。在Web浏览器中它工作得很好。但是,通过CLI我遇到了一个错误,尽管我已经在/etc/php/php.ini
加载了扩展。
致命错误:在/volume1/web/blabla.php的第16行,未捕获的PDOException:找不到驱动程序
有什么想法吗?
Synology使用两个不同的PHP安装。一个用于内部问题(如管理员面板),另一个用于您为Web服务器安装的软件包。
您可以通过命令行观察到差异:
php --ini
php56 --ini
php7 --ini
(取决于安装的PHP包)
使用php56或php7来运行您的脚本
更新
请在安装了以下版本的PHP上使用(假设两个都已安装)
php72 --ini
php74 --ini
/usr/syno/etc/packages/WebStation/php_profile/...一长串数字.../conf.d/user_settings.ini
加载扩展程序,CLI从/usr/local/etc/php74/cli/conf.d/extension.ini
加载。将扩展程序添加到最后一个位置适用于我。 - Michel我和你一样,试图在我的Synology DiskStation DS218+命令行上运行PHP 7.0。
我输入了php70 --ini
,发现PHP使用的INI文件位于/usr/local/etc/php70/php.ini
。
我进入了这个目录。
cd /usr/local/etc/php70/
为了保险起见,备份了.ini
文件。
sudo cp php.ini php.ini.bak
打开了vi
。
sudo vi php.ini
按下 i
键进入 插入
模式。我从这个变成了:
extension_dir = "/usr/local/lib/php70/modules"
转换为:
extension_dir = "/volume1/@appstore/PHP7.0/usr/local/lib/php70/modules"
我还添加了这一行:
extension = pdo_mysql.so
然后我按下Esc
,接着是:
,然后是wq
和.
。这样就退出了插入模式,将.ini
文件写入磁盘并退出。
就这样!之后,我可以通过调用php70
,再加上脚本名称来运行命令行脚本。
请确保使用正确的PHP版本和PHP.ini文件。您可以通过输入“php --ini”找到php.ini文件的位置。您也可以在可执行文件php56/php70上执行此操作。它们都有单独的php.ini文件。此外,请确保在适用的php.ini文件中加载正确的扩展目录。
/usr/local/etc/php70/php.ini
中添加以下行。extension = pdo_mysql.so
extension = openssl.so
我花了很长时间才得到正确的值,最终通过与php56实例的配置文件进行比较找到了它们。
php.ini
文件。一个用于 Apache,另一个专门用于 PHP CLI。运行php --ini
命令并查看你的 PHP CLI ini 文件实际位置。 - RiggsFolly