- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常常见的问题,花了几个小时阅读有关它的一些内容,但是我无法解决它,而且我会发疯...
语境
我有一个网站,用户可以在该网站上将图片上传到我的服务器上(通常是通过iOS / Safari浏览器)。带有上传表单的页面为this one。
后端由PHP(无框架)组成。前端是HTML / Javascript。这是我在2010年制作的相当老的网站,因此这不是“超级性感”的网站! :-)
我制作了日志来监视上传结果,我发现大约30%的用户上传失败了……我想这是不常见的!
这些错误来自2个来源(同一位用户尝试上传几次,可能会混合使用这2个来源):$_FILES['myFormFieldName']
为NULL$_FILES['myFormFieldName']
不为NULL,但$_FILES['myFormFieldName']['error']
为3(UPLOAD_ERR_PARTIAL
),其中$_FILES['xxx']['tmp_name']
和$_FILES['xx']['type']
为空,并且$_FILES['xxx']['size']
为“ 0”
这些错误似乎不是确定性的...
当我测试自己时(使用与上载有问题的用户相同的图像),我没有问题
我在日志中看到一些用户发现上传总是有问题,而其他用户则没有。
我还看到一些遇到问题的用户几次重试后设法成功上传了文件
我与一个用户联系时遇到问题,他说在尝试上传照片时(无论是使用WiFi还是移动3G / 4G数据),他都从Safari获得Safari cannot open the page because network connection was lost
错误页面
码
上传文件的表单HTML
(限制用户从客户端上传到35M)
<ul class="pageitem">
<form name="empty-custom-native"
enctype="multipart/form-data"
action="/upload.php?method=nativeUpload"
method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="36700160" />
<li class="button" >
<input type="file" name="iosImageFILE" id="iosImageFILE"/>
</li>
</form>
<li class="button directUrlButton" onclick="javascript:onclickNativeUploadForm();">
<input type="button" value="Upload" />
</li>
</ul>
function onclickNativeUploadForm(){
if( document.getElementById('iosImageFILE').value=="" ){
alert("Please choose an image FIRST !");
} else{
showPleaseWait();
setTimeout(submitNativeUploadForm, 2000);
}
}
function submitNativeUploadForm(){
document.forms['empty-custom-native'].submit();
}
<?php
if( isset($_FILES['iosImageFILE']) && !empty($_FILES['iosImageFILE']) ){
$uploadStatus = $_FILES['iosImageFILE']['error'];
if( $uploadStatus==0 ){
// Copy source file to temp file
if( !move_uploaded_file($_FILES['iosImageFILE']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/".$userImageTemp) ) {
throw new Exception("fileUploadCopy");
}
} else{
if( $uploadStatus==1 ){ throw new Exception("fileUploadIniSize"); }
else if( $uploadStatus==2 ){ throw new Exception("fileUploadFormSize"); }
else if( $uploadStatus==3 ){ throw new Exception("fileUploadPartial"); } // THIS ERROR ...
else if( $uploadStatus==4 ){ throw new Exception("fileUploadNoFile"); }
else if( $uploadStatus==6 ){ throw new Exception("fileUploadNoTmpDir"); }
else if( $uploadStatus==7 ){ throw new Exception("fileUploadCantWrite"); }
else if( $uploadStatus==8 ){ throw new Exception("fileUploadExtension"); }
else{
throw new Exception("fileUploadSystem");
}
}
} else{
throw new Exception("fileUploadUpload"); // ... OR THIS ERROR
}
// If anything was OK, we continue here with the uploaded file copied in our working dir to do some stuff with it...
?>
fileUploadUpload
或
fileUploadPartial
例外。
ini_get
命令),以确保我没有超过最大文件大小或最大上传数量。
post_max_size
比
upload_max_filesize
更大。
upload_tmp_dir
为空,我想这意味着我使用默认系统
/tmp
目录?
php.ini
,但是这些值由我的托管服务提供商固定(我在共享主机上)。
file_uploads : '1'
upload_tmp_dir : ''
upload_max_filesize : '128M'
max_file_uploads : '20'
post_max_size : '130M'
max_execution_time : '300'
MAX_FILE_SIZE
小于我的PHP服务器允许的最大文件大小。
enctype="multipart/form-data"
和
method="post"
。
$_FILES['iosImageFILE']
的内容时,得到的是
fileUploadPartial
错误的内容(对于
fileUploadUpload
错误,它为null)。
iosImageFILE = {"name":"DD292A1C-9CBF-4843-9E1C-7C815593C67A.png","type":"","tmp_name":"","error":3,"size":0}
/tmp
目录,但是我无权访问它。我想检查一下是否不是“旧的tmp文件已满”,但我想不是。
var_export(scandir('/tmp'))
扫描其内容,而我只看到一些
sess_xxxxx
会话文件(大约7000个文件)。
最佳答案
故事的结尾:怀疑,这是我的托管服务提供商遇到的问题(他们花了1个月的时间解决了...)
我没有得到更多详细信息,除了那是一个“ Apache配置问题”,而且它具有负载平衡的链接...
关于php - PHP文件上传错误(UPLOAD_ERR_PARTIAL)/$ _FILES为空或具有空的“tmp_name”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56041214/
我有一个非常常见的问题,花了几个小时阅读有关它的一些内容,但是我无法解决它,而且我会发疯... 语境 我有一个网站,用户可以在该网站上将图片上传到我的服务器上(通常是通过iOS / Safari浏览器
我正在开发一个 REST API 并且我有一些文件上传: 当文件只上传了一部分时,PHP 会产生一个 UPLOAD_ERR_PARTIAL 错误,我不确定是哪个 HTTP status code应该在
我是一名优秀的程序员,十分优秀!