2017-07-21 3 views
1

私は、次の写真を持っている:私は、次のリクエストは(jQueryのsortableから来た)きPHPの名前を変更するといくつかのファイルが削除されますか?

product-1.jpg 
product-2.jpg 
product-3.jpg 
product-4.jpg 

アクション= &写真を保存する=写真[] = 4 &写真[] = 2 &写真[] = 3 &写真[] = 1

私はこれを試してみた:

<?php 
if($_POST) { 
    if($_POST['action'] == 'save') { 
     parse_str($_POST['photos'], $photos); 

     $id_new = 1; 

     foreach($photos['photo'] as $id) { 
      rename(dirname(__FILE__) . '/product-' . $id . '.jpg', dirname(__FILE__) . '/product-' . $id_new . '.jpg'); 

      $id_new++; 
     } 
    } 
} 
?> 

ただし、renameは一部の写真を削除します。

+0

だから何の写真が削除されますか? –

+0

例rename()はファイルを削除できません。既存のファイルを上書きするだけで、おそらくそれに問題はありますか?いくつかのサブフォルダ(または他のフォルダ)に名前を変更してチェックしてみてください。すべてのファイルがコピーされ、名前が変更されています。 – MVG1984

+0

スクリプトを実行すると、 'product-1、product-2、product-3'はなくなりました。 'product-4'は同じままです。かなり変だ! – Nikolai

答えて

3

あなたは写真のid 4、3、2、1を持っていて、その逆の順序でファイルの名前を変更している:あなたは1〜4の名前を変更する場合

  1. その後、1上書きされ、4が
  2. 場合が消えます名前を3から2に変更すると、2が上書きされ、3が消えます。

これは、ファイルが少なくて済む理由です。

MVG1984はあなたのような別のフォルダにそれらのファイルの名前を変更することができますコメントで示唆したよう@:

$path = dirname(__FILE__); 
$tmpPath = $path . '/tmp'; 

mkdir($tmpPath); 

$id_new = 1; 
foreach($photos['photo'] as $id) { 
    rename($path . '/product-' . $id . '.jpg', $tmpPath . '/product-' . $id_new . '.jpg'); 
    $id_new++; 
} 

for ($i = 1; $i < $id_new; $i++) { 
    rename($tmpPath . '/product-' . $i . '.jpg', $path . '/product-' . $i . '.jpg'); 
} 

rmdir($tmpPath); 
+1

これは私が言っているexactyです:) – MVG1984

+0

実際には、IDは '1,2,3,4'であり、その後私は' 4,2,3,1'を得ました。私はこれが問題だと思っていましたが、私はそれをどのように修正するのかアドバイスを求めていました。 – Nikolai

+0

解答を編集して解決策を教えてください –

関連する問題