在php中重命名文件

时间:2012-11-17 21:20:04

标签: php

我想从此代码将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

4 个答案:

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

参考: