【发布时间】:2012-03-31 15:56:38
【问题描述】:
我已经尝试了很多方法来解决我的问题,但还没有遇到有效的解决方案...
问题很简单...
假设你有这个目录结构:
/website
/admin
/phpscript.php
/img
/folder1
/image1.png
/image2.png
我基本上想做的是: 创建一个文件夹...例如:folder2
/website
/admin
/phpscript.php
/img
/folder1
/image1.png
/image2.png
/folder2
然后将image1和image2移动到文件夹2中
php 脚本位于 admin 中,这是我设计要执行的移动操作的地方。
我试过了:rename('../img/folder1/image1.png', '../img/folder2/image1.png'); 失败了
copy('../img/folder1/image1.png', '../img/folder2/image1.png'); 也失败了
当文件的路径相同时,我可以使用复制和重命名...例如:
rename('../img/folder1/image1.png', '../img/folder1/image3.png');
这个将image1.png重命名为image3.png(image1.png不再存在于服务器上,image3.png是服务器创建的)
copy('../img/folder1/image1.png', '../img/folder1/image3.png');
这产生了一个名为 image3.png 的 image1.png 的副本(image1.png 和 image3.png 都在服务器上)
apache 服务器中的文件夹具有所有权限
...我注意到你可以这样做:
file_get_contents('../img/folder1/image1.png')
and then do
file_put_contents('../img/folder2/image1.png')
只要文件夹存在...由于某种原因,当 mkdir() 在 file_put_contents() 之前使用时,它不喜欢移动
这基本上是我的代码:
$path = "img/"; //Generated somewhere in code above
$old_folder = "folder1/"; //Generated somewhere in code above
$folder = "folder2/"; //Generated somewhere in code above
$tmp_old_path = "../$path$old_folder";
$tmp_new_path = "../$path$folder";
mkdir($tmp_new_path);
$FP = scandir($tmp_old_path);
foreach ($FP as $key => $val){
if($val != '.' && $val != '..'){
$str_contents = file_get_contents($tmp_old_path.$val);
file_put_contents($tmp_new_path.$val, $str_contents);
}
}
【问题讨论】:
-
“失败”怎么办?有任何错误信息吗?
-
你是在 Linux 上工作还是在 Windows 上工作?如果使用 Linux,你应该检查 folder2 的权限。
-
你的脚本对folder2有写权限吗?
-
failed = 返回 false/什么都没发生创建新文件夹...
-
激活错误报告和/或查看您的日志。如果文件无法移动/访问/打开,通常会生成警告。
标签: php copy rename file-get-contents