web-dev-qa-db-ja.com

PHPを使用してファイルを別のフォルダーに移動するにはどうすればよいですか?

私が作成した「temp」というフォルダに現在アップロードされている画像をユーザーがアップロードできるアップロードフォームがあり、その場所は$ _SESSION ['uploaded_photos']という配列に保存されています。ユーザーが[次のページ]ボタンを押したら、その直前に動的に作成された新しいフォルダーにファイルを移動します。

if(isset($_POST['next_page'])) { 
  if (!is_dir('../images/uploads/listers/'.$_SESSION['loggedin_lister_id'])) {
    mkdir('../images/uploads/listers/'.$_SESSION['loggedin_lister_id']);
  }

  foreach($_SESSION['uploaded_photos'] as $key => $value) { 
    $target_path = '../images/uploads/listers/'.$_SESSION['loggedin_lister_id'].'/';
    $target_path = $target_path . basename($value); 

    if(move_uploaded_file($value, $target_path)) {
      echo "The file ".  basename($value). " has been uploaded<br />";
    } else{
      echo "There was an error uploading the file, please try again!";
    }

  } //end foreach

} //end if isset next_page

使用されている$ valueの例は次のとおりです。

../images/uploads/temp/IMG_0002.jpg

また、使用されている$ target_pathの例は次のとおりです。

../images/uploads/listers/186/IMG_0002.jpg

ファイルが一時フォルダーにあるのがわかります。どちらのパスも私にはよく見え、mkdir関数が実際にうまく機能するフォルダーを作成したことを確認しました。

PHPを使用してファイルを別のフォルダーに移動するにはどうすればよいですか?

11
zeckdude

シナリオを読んでいると、アップロードを処理してファイルを「temp」フォルダーに移動したようです。次に、新しいアクション([次へ]ボタンをクリック)を実行したときにファイルを移動します。

PHPに関する限り、 'temp'内のファイルはアップロードされていないため、move_uploaded_fileを使用できなくなります。

あなたがする必要があるのは使用することだけです 名前の変更

if(isset($_POST['next_page'])) { 
  if (!is_dir('../images/uploads/listers/'.$_SESSION['loggedin_lister_id'])) {
    mkdir('../images/uploads/listers/'.$_SESSION['loggedin_lister_id']);
  }

  foreach($_SESSION['uploaded_photos'] as $key => $value) {
    $target_path = '../images/uploads/listers/'.$_SESSION['loggedin_lister_id'].'/';
    $target_path = $target_path . basename($value); 

    if(rename($value, $target_path)) {
      echo "The file ".  basename($value). " has been uploaded<br />";
    } else{
      echo "There was an error uploading the file, please try again!";
    }

  } //end foreach

} //end if isset next_page
21
HorusKol