PHP shell_exec 和 hg pull

3
我已经编写了一个简单的PHP脚本来帮助我在提交到Bitbucket时更新网站内容。以下是我的问题:
<?php
$repo_dir = '/var/www/vhosts/my_full_path';

$output = shell_exec('cd '.$repo_dir.' && hg --config auth.rc.prefix=https://bitbucket.org/XXXXX --config auth.rc.username=my_username --config auth.rc.password=my_pass pull -u https://bitbucket.org/XXXXXXX &');

echo $output;
?>

当我在浏览器中输入它时,它无法工作。脚本的输出如下所示:
从https://bitbucket.org/XXXXXXXXXXXXXX拉取
但是当我尝试在服务器上的控制台下执行它时,它就像魔法一样运行良好。
php myscript.php

生成以下输出:
pulling from https://bitbucket.org/XXXX
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

在控制台中看到输出结果是完整和正确的!我在Web浏览器 data-www 中使用 root 用户?在这种情况下是否有任何区别?


2
也许这些文件不可写且不可执行,因为它们是由root所有?还有,请不要使用root测试东西... - planetmaker
1个回答

0

我已经找到解决方案了,希望能对某些人有所帮助。

问题出在两个方面:

  • 我的repo目录权限
  • 用户www-data的身份验证

问题是由于Web浏览器在执行shell_exec命令时不会刷新警告和中止消息。如果您想测试脚本,您必须通过SSH登录控制台(例如作为root),然后以apache用户身份执行脚本/命令:

sudo -u www-data php /path-to-your-script/script.php

在控制台中,您将看到跟随用户生成的所有问题。


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