尝试重命名 PHP 中的两个文件

Trying to rename two files in PHP

我正在使用 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');

但是 none 这些尝试都奏效了。如何使用 http 包装器重命名这两个文件?或者我怎样才能用另一种方式重命名它们?

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.

来纠正

我这几天的问题出在ISPmanager的open_basediropen_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