如何在 synology 上执行带有扩展名的 PHP CLI 脚本

How to execute PHP CLI script with extension on synology

我正在尝试在我的 synology NAS 上通过命令行执行 php 脚本。通过网络浏览器,它工作正常。但是,尽管我在 /etc/php/php.ini.

中加载了扩展,但通过 CLI 出现错误

Fatal error: Uncaught PDOException: could not find driver in /volume1/web/blabla.php:16

有什么想法吗?

您尝试过: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) 希望对您有所帮助!

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

Synology 使用两种不同的 php 安装方式。一个用于内部问题(如管理员面板),另一个来自您为 Web 服务器安装的包。

您可以从命令行观察差异 运行ning:

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

(取决于安装的 php 包)

使用 php56 或 php7 到 运行 你的脚本


更新

请使用以下更新版本的 PHP(假设两者都已安装)

php72 --ini
php74 --ini

我在同一条船上 - 试图让 PHP 7.0 在我的 Synology DiskStation DS218+ 的命令行上工作。

我输入了 php70 --ini,我发现 PHP 正在使用位于 /usr/local/etc/php70/php.ini.

的 INI 文件

我去了目录

cd /usr/local/etc/php70/

备份 .ini 文件以防万一。

sudo cp php.ini php.ini.bak

已打开 vi

sudo vi php.ini

点击i进入Insert模式。我从这个改变:

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 后跟脚本名称来 运行 命令行脚本。

对我(DSM 6.1.6-15266 更新 1)而言,以下帮助:

将以下行添加到 /usr/local/etc/php70/php.ini

extension = pdo_mysql.so
extension = openssl.so

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