我发现在这种情况下的主要区别是环境和权限。该错误[4] => boost::filesystem::create_directory: Permission denied: "/.litecoin"
表明您的 php 页面正在查找or中的文件夹litecoin
,但未设置。这就是为什么它变成~
$HOME
/.litecoin
index.php
我用下面的代码创建了一个简单的文件
<?php
$out = array();
exec("env", $out);
var_dump($out);
我的默认 php 上相同的输出是
/home/vagrant/nginx/html/index.php:6:
array (size=9)
0 => string 'APACHE_RUN_DIR=/var/run/apache2' (length=31)
1 => string 'APACHE_PID_FILE=/var/run/apache2/apache2.pid' (length=44)
2 => string 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' (length=65)
3 => string 'APACHE_LOCK_DIR=/var/lock/apache2' (length=33)
4 => string 'LANG=C' (length=6)
5 => string 'APACHE_RUN_USER=www-data' (length=24)
6 => string 'APACHE_RUN_GROUP=www-data' (length=25)
7 => string 'APACHE_LOG_DIR=/var/log/apache2' (length=31)
8 => string 'PWD=/home/vagrant/nginx/html' (length=28)
如您所见$HOME
,这可能是导致问题的一个可能原因
因此,您应该确保您正在运行的可执行文件可以使用正确的环境。你可以这样做
exec("HOME=/var/www/html X=Y A=B env", $out);
命令的输出显示它可以看到更新的变量
/home/vagrant/nginx/html/index.php:6:
array (size=12)
0 => string 'HOME=/var/www/html' (length=18)
1 => string 'APACHE_RUN_DIR=/var/run/apache2' (length=31)
2 => string 'APACHE_PID_FILE=/var/run/apache2/apache2.pid' (length=44)
3 => string 'A=B' (length=3)
4 => string 'X=Y' (length=3)
5 => string 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' (length=65)
6 => string 'APACHE_LOCK_DIR=/var/lock/apache2' (length=33)
7 => string 'LANG=C' (length=6)
8 => string 'APACHE_RUN_USER=www-data' (length=24)
9 => string 'APACHE_RUN_GROUP=www-data' (length=25)
10 => string 'APACHE_LOG_DIR=/var/log/apache2' (length=31)
11 => string 'PWD=/home/vagrant/nginx/html' (length=28)
找出您需要哪些环境变量并确保它们存在并尝试设置路径以便您的可执行文件使用/var/www
或/var/www/html
它可以访问的任何路径,然后执行程序