12

我想知道是否有人可以帮助我。

我整理了这个页面,允许用户以画廊格式查看他们上传的图像。

我现在想为每个图像添加删除功能。我已经创建了按钮和它背后的 Javascript,但我真的不确定如何将“按钮单击”与文件的实际物理删除联系起来。

这些图像没有存储在数据库中,而是位于我服务器上的两个文件夹位置,结构如下:

UploadedFiles/username/locationid/imagename

UploadedFiles/username/locationid/Thumbnails/imagename

我对 PHP 比较陌生,现在我已经达到了我的知识极限,但肯定愿意学习。从我读过的文档中,我认为我说该unlink方法是正确使用的命令是正确的?

但是我发现真正困难的是告诉代码找到与当前匹配的文件夹username和文件夹,然后删除与名称变量匹配的文件。locationidusernamelocationid$source

我只是想知道是否有人可以就我如何解决这个问题提供一些指导。

非常感谢和亲切的问候

4

2 回答 2

7

如果您可以将用户名、locationid 和 imagename 变量传递给脚本,则可以使用以下命令删除文件unlink()

$path = 'UploadedFiles/' . $username . '/' . $locationid . '/';

unlink( $path . $imagename );
unlink( $path . 'Thumbnails/' . $imagename );

因为您正在与文件系统进行交互,所以您需要确定并清理变量(防止有人使用 ../../../ 访问文件系统中不需要的部分)。

$username = str_replace( array( '..', '/', '\\', ':' ), '', $username );
$imagename = str_replace( array( '..', '/', '\\', ':' ), '', $imagename );
$locationid= str_replace( array( '..', '/', '\\', ':' ), '', $locationid );
于 2012-05-08T13:22:59.423 回答
0

显然,您的 javascript(客户端)将不得不调用 URL(服务器端)来删除用户选择的图片。我建议现在你静态地做(如果以后你想转向更动态的东西,那么转换成 ajax 的步骤相当小。

因此,正如 Set Sail Media 所说,单击删除按钮时,您必须将用户名和 locationID 传递给您的服务器。一种方法是:

当以 HTML/javascript 呈现您的画廊时,对于每张图片,您在其下方都有一个包含所需信息的 a,提交按钮将简单地从您的服务器调用删除脚本。你可以做的一个例子是:

    <form name="deleteImageX" method="GET" target="your.server.org/deleteImage.php">
        <input type="hidden" name="userName" value="theUserNameAssociatedWithThePicture" />
        <input type="hidden" name="locationId" value="locationOfThePicture" />
        <input type="submit" value="delete"/>
    </form>

此表单会将所需的值存储在隐藏字段中,这些字段不会显示在网页上,但在按下提交按钮时仍会发送到服务器。

(对于这个小故事,这里使用的方法是 GET,因为 AFAIK HTML 不支持 DELETE 方法(这在我们的例子中是合适的))。

GET 方法将调用脚本“your.server.org/deleteImage.php”。在此脚本中,您将拥有使用 $_GET['username'] 和 $_GET['locationId'] 变量删除图像所需的所有信息(用户名/locationId)。然后正如您所提到的,您将需要使用 unlink 方法从服务器中实际删除文件。

最后,完成此操作后,您需要重定向 php 脚本,以便在删除图像后再次显示图库(例如)。如果你有某种模板引擎,这可以通过调用脚本来完成,或者通过调用 php.ini 的“header”函数来完成。

我希望这个流程是你所期望的,我希望我对你有所帮助。

问候,

于 2012-05-08T13:41:52.077 回答