1

問題があります..「削除」ボタンを使用してARRAYのディレクトリから画像を表示します-アクションdelete.php ..

「削除」ファイルをクリックすると、delete.php は dir からイメージを削除し、TXT ファイルからパスを削除する必要があります。以下の PHP コードは、dir からファイルのみを削除します。TXT ファイルから PATH を削除する方法がわかりません。このスクリプトが必要です。 .

TXT ファイルは次のようになります。

../../gallery/glowna//thumb_1300625269.jpg|
../../gallery/glowna//thumb_1300625300.jpg|
../../gallery/glowna/thumb_1300626725.jpg

そしてdelete.php

<?php

$plik=$_POST['usun'];
$nowa = substr($plik, 6, 20);

unlink('../../gallery/glowna/'.$_POST['usun']);
unlink('../../gallery/glowna/'.$nowa);

header("location:usun.php");

?>

以下のコードを使用しようとしていますが、TXT ファイルがすべてをクリーニングしているため、何かが間違っています:

$txt = "../../dynamic_ajax.txt";
$img = "../../gallery/glowna/".$_POST['usun'];

$file = file_get_contents($txt, true);
$file2 = explode('|', $file);
$search=array_search($img, $file2);

unset($search);

$separator = implode("|", $file2);

file_put_contents($txt, $separator);
4

2 に答える 2

0

これはどうですか?

$file = file_get_contents($txt, true);
$file2 = explode('|', $file);

$new_array = Array();

foreach ($file2 as $path) {
  if (/* path should be preserved */) {
    $new_array[] = $path;
  }
}

$new_contents = implode("|", $new_array);
file_put_contents($txt, $new_contents);

ただし、これを公開サーバーに置いてからしばらくすると、TXT ファイルがなくなることに注意してください。これを想像してください:

  • 最初のプロセス (スレッド) は、書き込み用にファイルを開きます (0 文字に切り捨てます)。
  • 2 番目のプロセスは空のファイルを読み取ります。
  • 1ページ目 良いファイルを書き込みます。
  • 2 番目のプロセスは空のファイルを書き込みます。

何らかのロック機構を使用することでこれを回避できますが、他のオプションを検討してください。そのファイルにパスしかない場合は、画像用の特別なフォルダーを用意してみませんか? 次に、そのフォルダーをリストするだけで、どのファイルが存在するかがわかります。画像と一緒にメタデータを保存したい場合は、データベースが役に立ちます。

于 2011-03-20T17:02:11.013 に答える
0

わかりました、私はあなたの意味を理解していると思います。これは私が書き留めたものです。コードを少しクリーンアップすることをお勧めします。

$q      = 'thumb_1300625300.jpg';
$files  = file_get_contents('files.txt');
$arr    = explode('|', $files);
foreach ($arr as &$file) {
    if (strpos($file, $q) !== false) {
        $file = '';
        break; 
    } 
}
$files  = implode('|', $arr);
$files  = str_ireplace('||', '|', $files);
file_put_contents('files.txt', $files);

かなり単純なコード。

  1. ファイルを開き、| で分割します。
  2. 次に、画像に一致するパスを探して配列をループし、それを空にしてからループをスキップします
  3. 次に、文字列を内破してから、二重 | を削除します。要素を削除したため

いくつかの注意事項があります。このスクリプトは、パスの 1 つのインスタンスのみを検索します。複数ある場合は、ループを実行させて、break. str_ireplace('||', '|', $files);複数の | を検索するように変更する必要もあります。

于 2011-03-20T15:45:03.520 に答える