如何在Synology上使用扩展执行PHP CLI脚本

5

我正在尝试在我的Synology NAS上通过命令行执行一个PHP脚本。在Web浏览器中它工作得很好。但是,通过CLI我遇到了一个错误,尽管我已经在/etc/php/php.ini加载了扩展。

致命错误:在/volume1/web/blabla.php的第16行,未捕获的PDOException:找不到驱动程序

有什么想法吗?


好的,bla bla 部分可能会有用,你介意吗?还需要一些实际的代码。 - RiggsFolly
谁会给这样一个模糊、提问不清的问题点赞呢?请阅读当您将鼠标悬停在点赞按钮上时所得到的工具提示。它并没有,它不是,也不应该是。 - RiggsFolly
3
与代码无关,我为什么要发布实际的代码呢? - blackswan
你是否意识到通常有两个 php.ini 文件。一个用于 Apache,另一个专门用于 PHP CLI。运行 php --ini 命令并查看你的 PHP CLI ini 文件实际位置。 - RiggsFolly
你是我的救星!将扩展目录路径更改为“/volume1/@appstore/PHP7.0/usr/local/lib/php70/modules”,并在正确的PHP.ini文件中添加扩展名,有助于启用CLI中的PDO支持。非常感谢! - blackswan
5个回答

7

Synology使用两个不同的PHP安装。一个用于内部问题(如管理员面板),另一个用于您为Web服务器安装的软件包。

您可以通过命令行观察到差异:

php --ini
php56 --ini
php7 --ini

(取决于安装的PHP包)

使用php56或php7来运行您的脚本


更新

请在安装了以下版本的PHP上使用(假设两个都已安装)

php72 --ini
php74 --ini

使用PHP7.4,WebStation 从/usr/syno/etc/packages/WebStation/php_profile/...一长串数字.../conf.d/user_settings.ini加载扩展程序,CLI从/usr/local/etc/php74/cli/conf.d/extension.ini加载。将扩展程序添加到最后一个位置适用于我。 - Michel

2

我和你一样,试图在我的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,再加上脚本名称来运行命令行脚本。


1
Synology的PHP自动更新似乎会覆盖php.ini文件。因此最好将其禁用。也许有人有解决这个问题的想法。 - blackswan

1

请确保使用正确的PHP版本和PHP.ini文件。您可以通过输入“php --ini”找到php.ini文件的位置。您也可以在可执行文件php56/php70上执行此操作。它们都有单独的php.ini文件。此外,请确保在适用的php.ini文件中加载正确的扩展目录。


0
对我来说(DSM 6.1.6-15266 Update 1),以下操作有帮助:
/usr/local/etc/php70/php.ini中添加以下行。
extension = pdo_mysql.so
extension = openssl.so

我花了很长时间才得到正确的值,最终通过与php56实例的配置文件进行比较找到了它们。


-1
你试过这样吗:php56 path/to/script.php 或者 php70 path/to/script.php? 如果我没记错的话,/etc/php/php.ini 是 DSM 引擎的配置文件... 对于 Symfony,我使用 php56 bin/console 命令。php 或者 php70 对我来说不起作用(在 DS415+ 上运行 DSM 6.1.3)。 希望能有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接