我的php函数在shell中调用时起作用
php script.php
以下是script.php
中的内容:
copy("/home/mysite/public_html/streams/videos/1_video.flv","/home/mysite2/public_html/uploads/recordings/video.flv");
但是当通过http
运行我的脚本时,复制不起作用。
我猜有些权限问题是我无法解决的。
有什么想法吗?
我收到错误/警告:
无法打开流:权限被拒绝。
答案 0 :(得分:1)
但是当通过
http
运行我的脚本时,复制不起作用。
是的,当您通过命令行运行脚本时,它将在您的个人用户权限下运行。
但是当你通过http
运行相同的脚本 - 意味着它通过Apache服务器 - 然后连接到Apache的用户需要具有来自源和放大器的读取权限。对目标的读/写权限。
因此,无法为Apache Web服务器用户正确设置其他源或目标。因此,假设您的Apache用户为www-data
,则更改/home/mysite/public_html/
中文件的所有权,如下所示:
sudo chown www-data -R /home/mysite/public_html/
有两种基本方法可以确定Apache用户在服务器上的位置。一个是通过这样的命令行:
ps aux | egrep '(apache|httpd)'
这将返回如下所示的进程列表:
www-data 13047 0.0 1.9 405496 11628 ? S Jun15 0:00 /usr/sbin/apache2 -k start
www-data 13048 0.0 1.8 405280 11248 ? S Jun15 0:00 /usr/sbin/apache2 -k start
www-data 14547 0.0 1.8 405488 11028 ? S Jun15 0:00 /usr/sbin/apache2 -k start
www-data 14649 0.0 1.8 405520 11044 ? S Jun15 0:01 /usr/sbin/apache2 -k start
www-data 16155 0.0 1.8 405496 11200 ? S Jun17 0:00 /usr/sbin/apache2 -k start
www-data 29323 0.0 1.7 405240 10876 ? S Jun18 0:00 /usr/sbin/apache2 -k start
用户将是每一行的第一个条目。因此,在这种情况下,www-data
是用户。
另一种处理在PHP中确定用户的方法是创建一个名为whoami.php
的小型PHP文件,如下所示:
sudo nano whoami.php
然后将这个简单的脚本放在该文件中:
<?php
echo exec('whoami');
?>
当您在网络浏览器中加载whoami.php
时,您会看到whoami
的输出,在我的情况下是www-data
。