从http调用时,php copy函数不起作用

时间:2014-06-20 17:19:52

标签: php

我的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运行我的脚本时,复制不起作用。

我猜有些权限问题是我无法解决的。

有什么想法吗?

我收到错误/警告:

  

无法打开流:权限被拒绝。

1 个答案:

答案 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