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);
Довольно простой код.
- Открывает файл и разбивает его по |
- Затем он проходит по массиву в поисках пути, соответствующего изображению, делает его пустым, а затем пропускает цикл.
- Затем вы взорвать строку, а затем удалить двойной | потому что мы удалили элемент
Пара предостережений. Этот скрипт ищет только один экземпляр пути. Если у вас есть несколько, то позвольте циклу выполнить свой ход и удалить break
, Вы также должны изменить str_ireplace('||', '|', $files);
так что будет искать несколько |