Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过表单更新服务器上的图像并在提交后显示?_Php - Fatal编程技术网

Php 如何通过表单更新服务器上的图像并在提交后显示?

Php 如何通过表单更新服务器上的图像并在提交后显示?,php,Php,我有一个带有文本输入的表单,允许用户插入图像的URL并提交表单以将图像上载到服务器。因此,图像被转换为PNG,用散列重命名并保存在服务器dirimages/ 这是要上传的代码: if (isset($_POST["cover"])) { imagepng(imagecreatefromstring(file_get_contents($_POST["cover"])), "images/".$hash.".png"); } 这样就可以了,问题是当用户试图从一个新的U

我有一个带有文本输入的表单,允许用户插入图像的URL并提交表单以将图像上载到服务器。因此,图像被转换为PNG,用散列重命名并保存在服务器dir
images/
这是要上传的代码:

   if (isset($_POST["cover"])) {
        imagepng(imagecreatefromstring(file_get_contents($_POST["cover"])), "images/".$hash.".png");
   }
这样就可以了,问题是当用户试图从一个新的URL更新图像时

用于更新图像的表单具有服务器上实际转换和散列图像的
值的输入。如果用户修改输入URL并提交更新表单,它将覆盖服务器上的图像

现在我有缓存问题。如何在提交表单后显示更新的图像而不必清理浏览器缓存

详细信息页面:
index.php?page=details

用户点击更新,更新页面被加载
index.php?page=edit

用户提交表单,插入的数据被保存并加载回details
index.php?page=details
,其中显示有问题的图像。

只需将
附加到
src
属性的末尾,它将生成一个时间戳,希望,使浏览器再次请求图像并忽略缓存

您也可以查看.htaccess,定义一个filematch指令,该指令发送头以强制浏览器完全不缓存

<FilesMatch "\.(png|jpg)$">
    FileETag None
    <IfModule mod_headers.c>
         Header unset ETag
         Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
         Header set Pragma "no-cache"
         Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
    </IfModule>
</FilesMatch>

FileTag无
标题未设置ETag
标题集缓存控制“最大年龄=0,无缓存,无存储,必须重新验证”
标题集Pragma“无缓存”
标题集过期“1984年1月11日星期三05:00:00 GMT”

我希望答案是有帮助的。

那么您也保留了新图像的哈希名称?@Pjack是的,名称必须保持完整。因为该散列附加到其他文件。图像如何显示在页面上?可能需要查看更多代码?提交表单后会发生什么?@Pjack请再次查看我的问题,看看是否有帮助。我仍在努力实现这一点。仅澄清url必须是
images/“$hash.”.png?=“.time()
images/“$hash.”.png?”=time()
images/“$hash.”.png?”.time()
本例中的=运算符用作echo的简写。