12

このコードからpicturefilename(拡張子なし)の名前を変更したい。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

4 に答える 4

9

絶対パスまたは相対パスのいずれかを使用する必要があります(その場合はおそらくより良いでしょう)。親ディレクトリにある場合は、次のコードを試してください。

old = '..' . DIRECTORY_SEPARATOR . 'picture';
$new = '..' . DIRECTORY_SEPARATOR . 'old.jpg';
rename($old , $new);
于 2012-11-17T21:27:32.553 に答える
9

相対パスは、実行されているスクリプト($_SERVER['SCRIPT_FILENAME']Webサーバーで実行されている場合)に基づいていますが、ファイル操作が行われるファイルであるとは限りません。

// 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

于 2012-11-19T01:49:59.187 に答える
4

SethとJackが述べたように、スクリプトが古いファイルを見つけることができないため、エラーが表示されます。親ではなく、現在のディレクトリで表示するようにしています。

これを修正するには、古いファイルのフルパスを入力するか、次のようにしてみてください。

rename("../picture.jpg", "old.jpg");

../単一のディレクトリ(この場合は親ディレクトリ)をトラバースします。Windowsでも機能を使用../するため、バックスラッシュを使用する必要はありません。

これらの変更を行ってもエラーが発生する場合は、ディレクトリ構造を投稿して、すべての人が確認できるようにすることをお勧めします。

于 2012-11-17T21:26:41.787 に答える
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

参照:

于 2020-08-04T09:07:58.407 に答える