PHP, удалить путь из файла TXT

У меня есть проблема.. Я отображаю изображения из каталога в ARRAY с помощью кнопки "удалить" - действие delete.php..

Если я нажимаю "удалить" файл, delete.php должен удалить изображение из dir и путь из TXT-файла. Ниже кода PHP удалить только файл из dir, я не знаю, как я могу удалить PATH из TXT-файлов - мне нужен этот скрипт.,

TXT файл выглядит так:

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

И удалить.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);

2 ответа

Как насчет этого?

$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 исчезнет. Вообразите это:

  • 1-й процесс (поток) открывает файл для записи (усекает его до 0 символов).
  • 2-й процесс читает пустой файл.
  • 1-й с. пишет хороший файл.
  • 2-й процесс пишет пустой файл.

Вы можете обойти это, используя некоторый механизм блокировки, но рассмотрите другие варианты. Если у вас есть только пути в этом файле, почему нет специальной папки для ваших изображений? Затем просто перечислите эту папку, и вы знаете, какие файлы присутствуют. Если вы хотите сохранить метаданные с изображениями, база данных - ваш друг.

Хорошо, я понимаю, что вы имеете в виду. Это то, что я набросал, вы можете немного очистить код.

$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. Затем вы взорвать строку, а затем удалить двойной | потому что мы удалили элемент

Пара предостережений. Этот скрипт ищет только один экземпляр пути. Если у вас есть несколько, то позвольте циклу выполнить свой ход и удалить break, Вы также должны изменить str_ireplace('||', '|', $files); так что будет искать несколько |

Другие вопросы по тегам