如何在PHP

时间:2016-10-14 06:46:55

标签: php image file-upload imagemagick php-gd

这是场景。我有两个请求,一个用于上传图像,另一个用于处理上传的图像。 执行file_exists()检查可以让我知道文件是否存在。 但是,即使文件完全上传之前我遇到第二个请求(处理图像)也会出现问题。 如果我错了,请纠正我file_exists()会返回true,因为即使上传了一个字节,即使图片数据没有完全上传,也会创建文件,这会在我们进一步处理图像时出现问题。

其中一个解决方案是客户端校验和,我验证该文件是否已上传。

我想知道这项检查是否可以单独用PHP完成?

我尝试使用PHP Imagick,如

try {
    $imageMagickCheck = new Imagick($filename);
} catch (Exception $exc) {
    $error = $exc->getMessage();
    file_put_contents("/tmp/corruption.log", $error."\n",FILE_APPEND);
    $imageMagickCheck = FALSE;
}

如果我通过手动删除图像的二进制数据,上面的代码给出了一个例外。文本编辑器,然后将该文件提供给代码。所以,我认为它应该识别图像是否完全上传。但是,我没有看到这样做有任何例外。我不知道为什么。我在某地读到我们可以用createimagefromjpg()做类似的事情。

如果有人能给我一个清晰的图片,我真的很感激。

图片上传程序

图片上传分两个阶段进行。基本上图像处理服务器是Lua-Openresty服务器,我们有一个用PHP编写的包装器。 客户端将图像上传为Multipart表单上载,我在PHP包装器的$_FILES数组中收到该表单。然后我使用cURL将此文件上传到Lua服务器。 Lua再次将此文件保存到其各自的目录中。 PHP Wrapper和openresty服务器共享相同的文件系统。没有将文件发送到lua,并通过PHP本身保存文件(我打算这样做)是有意义的,但即使这样,问题仍然存在。

2 个答案:

答案 0 :(得分:-1)

使用is_uploaded_file();     

if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
   echo "File ". $_FILES['userfile']['name'] ." uploaded successfully.\n";
}
?>

答案 1 :(得分:-1)

在这种情况下,你可以尝试这个

 public function checkcompletefileuploaded($url = '') {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    // don’t download content
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if (curl_exec($ch) !== FALSE) {
      return true;
    } else {
      return false;
    }
  }

  $result = checkcompletefileuploaded($imagefullpath);

  if($result){
    echo "File upoloaded succesfully";
  }else{
    echo "File not uploaded";
  }

注意:$ imagefullpath:新上传的文件路径(目标文件夹路径)。