从服务器删除图像文件

我想知道有人能否帮助我。

我把这个页面放在一起,允许用户以画廊格式查看他们上传的图像。

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

图像不存储在数据库中,但位于服务器上的两个文件夹位置,结构如下:

UploadedFiles/username/locationid/imagename

UploadedFiles/username/locationid/Thumbnails/imagename

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

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

我只是想知道是否有人可以提供一些指导,我可以如何去做这件事。

非常感谢和亲切的问候


如果您可以将用户名,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 );

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

正如Set Sail Media所说的那样,当点击删除按钮时,您必须将用户名和位置ID传递到您的服务器。 一种方法是:

以HTML / JavaScript呈现图库时,对于每张图片,您都会在下面看到一个包含所需信息的提交按钮,而提交按钮将简单地从您的服务器调用删除脚本。 你可以做的一个例子是:

    <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”。 在这个脚本中,您将拥有所有需要的信息(username / locationId),通过使用$ _GET ['username']和$ _GET ['locationId']变量来删除图像。 然后,正如你所提到的,你将需要使用unlink方法来实际从服务器上删除文件。

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

我希望这个流程符合你的预期,并且我希望我能提供帮助。

问候,

链接地址: http://www.djcxy.com/p/59377.html

上一篇: Delete Image Files From Server

下一篇: What does a relationship owner mean in Hibernate?