显然我说它有一个正确的名字'属性引用但显然无法正常工作。
HTML:
<form action="scripts/upload.php" method="POST" enctype="multipart/form-data">
Select Content to Upload:
<br>
<input type="file" name="filesToUpload[]" multiple="multiple" required>
<input type="submit" value="Upload Content">
</form>
PHP:
var_dump($_POST); print "<br>"; var_dump($_FILES); print "<br>";print "<br>";
if (isset($_POST['filesToUpload'])) {
print $_POST['filesToUpload'];
} else {print "POST not set";}
输出:
array(0) { }
array(1) { ["filesToUpload"]=> array(5) { ["name"]=> array(1) { [0]=> string(12) "Chimera.jpeg" } ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } ["tmp_name"]=> array(1) { [0]=> string(14) "/tmp/phptdEVQ9" } ["error"]=> array(1) { [0]=> int(0) } ["size"]=> array(1) { [0]=> int(28671) } } }
array(0) { }
POST not set
所以$ _FILES已初始化,但为什么不是$ _POST?为什么它告诉我没有设置$ _POST数组。我知道它不是基于输出,但不应该是?我觉得我犯了一些愚蠢的语法错误。
答案 0 :(得分:3)
你正在寻找错误的超级全球化。您上传了一个file
,因此可以在$_FILES
超级全局中访问,您已经var_dump($_FILES)
了。
任何其他input
都会添加到您的$_POST
。您将能够通过$_FILES
数组访问文件:
foreach($_FILES['filesToUpload'] as $uploaded_file){
print_r($uploaded_file);
// do what you need to do with the files.
}
答案 1 :(得分:2)
所有文件都存在于$_FILES
超级全局内,而不是$_POST
。
执行$_FILES
的var_dump以查看上传的内容。
答案 2 :(得分:1)
以下是一个例子:
<?php
require_once 'functions.php';
if(isset($_FILES['filesToUpload']['tmp_name'], $_POST)) {
$files = reformat($_FILES['filesToUpload']);
foreach ($files as $file) {
$temp = $file['tmp_name'];
$path = 'upload/'.$file['name'];//replace
if(move_uploaded_file($temp, $path)){
echo 'success upload';
}else{
echo 'failed to upload';
}
}
}else{
echo 'file not uploaded';
}
?>
上传多个文件时,您需要循环浏览文件:
<?php
function reformat(&$file_post) {
$file_ary = array();
$file_count = count($file_post['name']);
$file_keys = array_keys($file_post);
for ($i=0; $i<$file_count; $i++) {
foreach ($file_keys as $key) {
$file_ary[$i][$key] = $file_post[$key][$i];
}
}
return $file_ary;
}
?>
reformat()
旨在重新组织数据结构