1

我有,问题..我使用按钮“删除”在 ARRAY 中显示来自 dir 的图像 - 操作 delete.php ..

如果我单击“删除”文件 delete.php 应该从目录中删除图像并从 TXT 文件中删除路径。下面的 PHP 代码仅从目录中删除文件,我不知道如何从 TXT 文件中删除 PATH - 我需要这个脚本。 .

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);
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 个字符)。
  • 第二个进程读取空文件。
  • 第 1 页。写好文件。
  • 第二个进程写入空文件。

您可以通过使用一些锁定机制来解决这个问题,但请考虑其他选项。如果您在该文件中只有路径,为什么不为您的图像设置一个特殊文件夹?然后只需列出该文件夹,您就知道存在哪些文件。如果您想与图像一起保存一些元数据,数据库是您的朋友。

于 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. 然后你内爆字符串,然后删除双 | 因为我们删除了一个元素

几个警告。此脚本仅查找路径的一个实例。如果您有多个,则让循环运行并删除break. 您还需要修改str_ireplace('||', '|', $files);,以便它会查找多个 |

于 2011-03-20T15:45:03.520 回答