PHP, удалить путь из файла TXT - PullRequest
1 голос
/ 20 марта 2011

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

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

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);

Ответы [ 2 ]

0 голосов
/ 20 марта 2011

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

$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-й процесс записывает пустой файл.

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

0 голосов
/ 20 марта 2011

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

$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);, чтобы он искал несколько |

...