如何在 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 实例的配置文件进行比较找到了它们。
我正在尝试在我的 synology NAS 上通过命令行执行 php 脚本。通过网络浏览器,它工作正常。但是,尽管我在 /etc/php/php.ini
.
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
.
我去了目录
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 实例的配置文件进行比较找到了它们。