Wordpress 图片上传错误 - 指定文件上传测试失败
Wordpress Image Upload Error - Specified file failed upload test
我已经尝试了几个小时来让它工作。
WP 图片上传适用于单张图片,无需使用 multiple
标签。
但在更改多张图片(数组)的php代码并添加multiple
标签后尝试上传多张图片时,显示错误:
指定文件上传测试失败。
文件上传数据来自 JSON,打印时工作正常。
以下是我目前尝试过的方法:
if(!function_exists('wp_handle_upload')){
require_once(ABSPATH.'wp-admin/includes/file.php');
}
foreach($styledNameData as $nameData){
//echo '<pre>'; print_r($nameData);
// It Prints
//Array
//(
// [name] => A_Front.png
// [type] => image/png
// [tmp_name] => C:\xampp\tmp\php5BFB.tmp
// [error] => 0
// [size] => 32901
//)
$upload_overrides = array('test_form' => false);
$movefile = wp_handle_upload($nameData, $upload_overrides);
}
if($movefile && !isset($movefile['error'])){
echo '<pre>';
print_r($movefile);
} else {
echo '<pre>';
print_r($movefile['error']);
}
HTML 是:
<form id="imagesForm" method="POST" enctype="multipart/form-data" action="<?php echo admin_url('admin-ajax.php'); ?>">
<input id="uploadfile" type="file" class="button button-secondary" name="uploadfile[]" multiple />
<input type="hidden" name="action" value="shpg_image_upload" />
<input type="submit" id="uploadImages" name="uploadImages" class="btn-medium col-sms-5 col-sm-3" value="UPLOAD" />
</form>
请帮忙。
如果 $_FILES 数组为空,这通常会发生。由于几个不同的原因,$_FILES 数组可能为空,通常是因为需要更改以下服务器设置之一。
file_uploads=Off <--- Set this to On
post_max_size=8M <-- increase this to be larger than your image
upload_max_filesize=2M <-- increase this to be larger than your image
我 运行 今天遇到了同样的问题。接受的答案并不正确。如果您查看 wp-admin/includes/ 中有问题的函数 _wp_handle_upload,触发此错误的检查只是检查 is_uploaded_file - 文件是否存在。文件大小和类型的测试直到之后才会发生。所以不 - 如果您收到此消息,解决方案将不会更改这些参数。
当 $_FILES 数组从我的表单返回时,在我的 admin_post 操作中,我最终通过查看 $_FILES 数组来调试它。您设置表单的方式,我认为它与我的相同。 $_FILES 数组不是此处预期的格式,并且因为 wp_handle_upload 被传递给 $_FILES 数组的索引 - 如果您在代码中触发此错误的位置处的 $file 变量为 NULL转储它(file.php:808)。
我的 $_FILES 数组如下所示:
array(1) {
["field_name"]=> array(5) {
["name"]=> array(2) {
[0]=>string(10) "1.png"
[1]=>string(10) "2.png"
}
["type"]=> array(2) {
[0]=>string(9) "image/png"
[1]=>string(9) "image/png"
}
["tmp_name"]=> array(2) {
[0]=>string(26) "/private/var/tmp/phpgg1rgH"
[1]=>string(26) "/private/var/tmp/phpMe907s"
}
["error"]=> array(2) {
[0]=>int(0)
[1]=>int(0)
}
["size"]=> array(2) {
[0]=>int(928815)
[1]=>int(871340)
}
}
}
因此,正如您所见,每个文件的属性首先由 属性 分解 - 而不是由文件索引分解。现在,如果您像这样更改文件数组的结构:
$images = [];
foreach( $_FILES[ 'field_name' ] as $prop => $values ){
foreach( $values as $key => $value ){
$images[ $key ][ $prop ] = $value;
}
}
$_FILES = $images;
在您调用 wp_handle_upload() 之前 - 一切都应该像您预期的那样工作。无论如何,那是我的问题 - 不确定是否有更好的方法来解决该错误。我不得不认为这可以在表单级别以某种方式解决,而不是覆盖 $_FILES 本身。但在紧要关头 - 它解决了我的问题。
我已经尝试了几个小时来让它工作。
WP 图片上传适用于单张图片,无需使用 multiple
标签。
但在更改多张图片(数组)的php代码并添加multiple
标签后尝试上传多张图片时,显示错误:
指定文件上传测试失败。
文件上传数据来自 JSON,打印时工作正常。
以下是我目前尝试过的方法:
if(!function_exists('wp_handle_upload')){
require_once(ABSPATH.'wp-admin/includes/file.php');
}
foreach($styledNameData as $nameData){
//echo '<pre>'; print_r($nameData);
// It Prints
//Array
//(
// [name] => A_Front.png
// [type] => image/png
// [tmp_name] => C:\xampp\tmp\php5BFB.tmp
// [error] => 0
// [size] => 32901
//)
$upload_overrides = array('test_form' => false);
$movefile = wp_handle_upload($nameData, $upload_overrides);
}
if($movefile && !isset($movefile['error'])){
echo '<pre>';
print_r($movefile);
} else {
echo '<pre>';
print_r($movefile['error']);
}
HTML 是:
<form id="imagesForm" method="POST" enctype="multipart/form-data" action="<?php echo admin_url('admin-ajax.php'); ?>">
<input id="uploadfile" type="file" class="button button-secondary" name="uploadfile[]" multiple />
<input type="hidden" name="action" value="shpg_image_upload" />
<input type="submit" id="uploadImages" name="uploadImages" class="btn-medium col-sms-5 col-sm-3" value="UPLOAD" />
</form>
请帮忙。
如果 $_FILES 数组为空,这通常会发生。由于几个不同的原因,$_FILES 数组可能为空,通常是因为需要更改以下服务器设置之一。
file_uploads=Off <--- Set this to On
post_max_size=8M <-- increase this to be larger than your image
upload_max_filesize=2M <-- increase this to be larger than your image
我 运行 今天遇到了同样的问题。接受的答案并不正确。如果您查看 wp-admin/includes/ 中有问题的函数 _wp_handle_upload,触发此错误的检查只是检查 is_uploaded_file - 文件是否存在。文件大小和类型的测试直到之后才会发生。所以不 - 如果您收到此消息,解决方案将不会更改这些参数。
当 $_FILES 数组从我的表单返回时,在我的 admin_post 操作中,我最终通过查看 $_FILES 数组来调试它。您设置表单的方式,我认为它与我的相同。 $_FILES 数组不是此处预期的格式,并且因为 wp_handle_upload 被传递给 $_FILES 数组的索引 - 如果您在代码中触发此错误的位置处的 $file 变量为 NULL转储它(file.php:808)。
我的 $_FILES 数组如下所示:
array(1) {
["field_name"]=> array(5) {
["name"]=> array(2) {
[0]=>string(10) "1.png"
[1]=>string(10) "2.png"
}
["type"]=> array(2) {
[0]=>string(9) "image/png"
[1]=>string(9) "image/png"
}
["tmp_name"]=> array(2) {
[0]=>string(26) "/private/var/tmp/phpgg1rgH"
[1]=>string(26) "/private/var/tmp/phpMe907s"
}
["error"]=> array(2) {
[0]=>int(0)
[1]=>int(0)
}
["size"]=> array(2) {
[0]=>int(928815)
[1]=>int(871340)
}
}
}
因此,正如您所见,每个文件的属性首先由 属性 分解 - 而不是由文件索引分解。现在,如果您像这样更改文件数组的结构:
$images = [];
foreach( $_FILES[ 'field_name' ] as $prop => $values ){
foreach( $values as $key => $value ){
$images[ $key ][ $prop ] = $value;
}
}
$_FILES = $images;
在您调用 wp_handle_upload() 之前 - 一切都应该像您预期的那样工作。无论如何,那是我的问题 - 不确定是否有更好的方法来解决该错误。我不得不认为这可以在表单级别以某种方式解决,而不是覆盖 $_FILES 本身。但在紧要关头 - 它解决了我的问题。