我想从此代码将picture
文件名(不带扩展名)重命名为old.jpg
。
我在父目录中有picture
个文件,路径正确
$old="picture";
$new="old.jpg";
rename($old , $new);
或此代码
$old="\picture";
$new="\old.jpg";
rename($old , $new);
$old="../picture";
$new="../old.jpg";
rename($old , $new);
$old="../picture";
$new="old.jpg";
rename($old , $new);
$old="./picture";
$new="./old.jpg";
rename($old , $new);
rename("picture", "old.jpg");
但是我收到了这个错误:
Warning: rename(picture,old.jpg) [function.rename]: The system cannot find the file specified. (code: 2) in C:\xampp\htdocs\prj\change.php on line 21
答案 0 :(得分:8)
您需要使用绝对路径或相对路径(在这种情况下可能更好)。如果它在父目录中,请尝试以下代码:
old = '..' . DIRECTORY_SEPARATOR . 'picture';
$new = '..' . DIRECTORY_SEPARATOR . 'old.jpg';
rename($old , $new);
答案 1 :(得分:5)
相对路径基于正在执行的脚本(在Web服务器中运行时为$_SERVER['SCRIPT_FILENAME']
),该脚本并不总是文件操作所在的文件:
// index.php
include('includes/mylib.php');
// mylib.php
rename('picture', 'img506.jpg'); // looks for 'picture' in ../
查找相对路径涉及比较执行脚本和您希望操作的文件的绝对路径,例如:
/var/www/html/index.php
/var/www/images/picture
在此示例中,相对路径为:../images/picture
答案 2 :(得分:4)
与Seth和Jack提到的一样,错误正在出现,因为脚本无法找到旧文件。你让它看起来在当前目录中而不是它的父目录。
要解决此问题,请输入旧文件的完整路径,或尝试以下操作:
rename("../picture.jpg", "old.jpg");
../
遍历单个目录,在本例中为父目录。使用../
也适用于Windows,无需使用反斜杠。
如果在进行这些更改后仍然出现错误,那么您可能希望发布目录结构,以便我们都可以查看它。
答案 3 :(得分:0)
可能您(即发出rename()
命令的脚本)不在您认为您所在的目录(和/或文件所在的目录)中。要进行调试,请首先显示目录中的文件列表:
$d=@dir(".");// or experiment with other directories, e.g. "../files"
while($e=$d->read()) { echo $e,"</br>"; }
找到包含文件的目录后,可以切换到该目录,然后重命名而没有任何路径:
chdir("../files"); // for example
// here you can print again the dir.contents for debugging as above
rename( "picture", "img.jpg" ); // args are: $old, $new
// here you can print again the dir.contents for debugging as above
参考: