这是场景。我有两个请求,一个用于上传图像,另一个用于处理上传的图像。
执行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本身保存文件(我打算这样做)是有意义的,但即使这样,问题仍然存在。
答案 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:新上传的文件路径(目标文件夹路径)。