试图用PHP重命名两个文件

时间:2015-09-07 12:36:11

标签: php rename wowza

我正在使用Ubuntu 12.04,apache2 + nginx(ISPManager)

我的服务器与Wowza Media Server配合使用,该服务器将录制的.flv视频放入{root-of-the-server}/movies

我收到了$_GET['rfile']行动的$this->request->get('rfile')视频名称。

文件在文件夹中成功创建,我以两种方式找到它:

file_get_contents('http://<ip, which sends to {root-of-the-server}>/movies/'.$this->request->get('rfile'));

`find /movies/ -name $rfile`;

要将我的录制视频从Wowza文件夹上传到网站,我正在尝试在录制停止后重命名该文件:


'{root-of-the-server}/movies/$this->request->get('rfile').flv'
为了
'.$_SERVER['DOCUMENT_ROOT'].'/upload/resume/resume'.$item['id'].'.flv'

我使用$_SERVER['DOCUMENT_ROOT'],因为我需要自动移动录制的视频,并在几个网站上移动。

注意:我没有将{root-of-the-server}放在我的实际脚本中,这只是一个在此发布的占位符。

我正在尝试用PHP重命名这个 首先尝试:
shell_exec('mv /movies/'.$this->request->get('rfile').''.$_SERVER['DOCUMENT_ROOT'].'/upload/resume/resume'.$item['id'].'.flv');
第二次尝试:
mv /movies/$rfile /movies/ok-just-rename-it-plz.flv
第三次尝试:
rename('http://95.183.8.96:81/'.$this->request->get('rfile'), 'http://95.183.8.96:81/'.$item['id'].'.flv');
第四次尝试:
rename('/movies/'.$this->request->get('rfile'), '/upload/resume/resume'.$item['id'].'.flv');

然而,这些尝试都没有奏效。如何使用http包装器重命名这两个文件?或者我如何以其他方式重命名它们?

2 个答案:

答案 0 :(得分:1)

rename就是您所需要的。如果它可以通过HTTP,你就会有一个主要的安全漏洞,所以坚持绝对路径。确保您的目标目录可以使用PHP写入:

echo is_writable($_SERVER['DOCUMENT_ROOT'] . '/upload/resume/resume') ? 'yup' : 'nope';

同时检查以确保源文件确实存在:

echo file_exists('/movies/' . $this->request->get('rfile')) ? 'yup' : 'nope';

并且您有权阅读它:

echo is_readable('/movies/' . $this->request->get('rfile')) ? 'yup' : 'nope';

如果其中任何一项失败,您就会遇到权限问题,需要使用chmodchown进行纠正。

答案 1 :(得分:0)

我现在的问题出现在ISPmanager的open_basedir中(默认情况下open_basedir已启用)。 我去/etc/apache2/apache2.conf进行了这些修改:

<Directory /var/www/USER/data/www/WEBSITE> php_admin_value open_basedir "/movies:/var/www/USER/data:." </Directory>

而不是

<Directory /var/www/USER/data/www/WEBSITE> php_admin_value open_basedir "/var/www/USER/data:." </Directory>

无论如何,感谢Kevin Nagurski的回答:33