【问题标题】:PHP, delete path from TXT filePHP,从 TXT 文件中删除路径
【发布时间】:2011-07-19 03:45:24
【问题描述】:

我有,问题..我在 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);

【问题讨论】:

  • 你的问题能不能说得清楚一点。真的很难理解你在说什么。
  • 你想做的是改变一个文本文件的内容?然后您可能应该打开该文本文件,创建一个包含您需要的所有文本的新字符串(使用preg_{xyz}()substr() 之类的东西,然后将所有内容写回该文件。没有unlink() 或其他东西。如果在那之前没有人帮助你,在以后的解决方案中会有更具体的事情。(顺便说一句。PHP 有点吸收这些任务,也许使用另一种语言,如 Python、Bash 或 Pearl(!))
  • @erikb unlink() 是删除图片。
  • unlink('../../gallery/glowna/'.$_POST['usun']); 哎哟!!!
  • @RobertPitt 的意思是,这是一种非常危险的删除方式,允许用户删除您的整个 Web 服务器、运行本机 Linux 命令或其他有趣的事情。

标签: php text-files unset


【解决方案1】:

这个怎么样?

$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 页。写好文件。
  • 第二个进程写入空文件。

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

【讨论】:

    【解决方案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);,让它查找多个|

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      相关资源
      最近更新 更多