php - 在不同的数组中获取文件数组变量的问题
问题描述
我正在将文件上传系统的 PHP 代码移动到自己的文件中,因此我可以使用 AJAX 上传文件。
我遇到了无法获取此更新代码的问题:
$filename = $fileArray[$fileNameVar];
$tmp_name = $fileArray[$fileTmpNameVar];
$filesize = $fileArray[$fileSizeVar];
$file_error = $fileArray[$fileErrorVar];
$file = $fileArray[$p_img];
要像以前那样操作,像这样:
$filename = $fileArray['file']['name'];
$tmp_name = $fileArray['file']['tmp_name'];
$filesize = $fileArray['file']['size'];
$file_error = $fileArray['file']['error'];
$file = $fileArray['file'];
当我尝试var_dump
从一组新变量中进行任何操作时,响应中没有显示任何内容。
有谁知道我需要如何设置这个数组?
这是完整的代码:
$p_img = $_FILES['file'];
//var_dump($p_img);
$fileNameVar = $p_img['name'];
$fileTmpNameVar = $p_img['tmp_name'];
$fileSizeVar = $p_img['size'];
$fileErrorVar = $p_img['error'];
//$fileFileVar = $p_img['file'];
try {
// If you make a file function, you can change where things are saved
// You can also change the destination (for portability)
function UploadFile($fileArray = array(), $destinationFolder = '../project_images/') {
/* $filename = $fileArray['file']['name'];
$tmp_name = $fileArray['file']['tmp_name'];
$filesize = $fileArray['file']['size'];
$file_error = $fileArray['file']['error'];
$file = $fileArray['file'];
*/
$filename = $fileArray[$fileNameVar];
$tmp_name = $fileArray[$fileTmpNameVar];
$filesize = $fileArray[$fileSizeVar];
$file_error = $fileArray[$fileErrorVar];
$file = $fileArray[$p_img];
var_dump($filename);
// Save all the default data.
// Success and error should be set by default to fail
$return['error'] = true;
$return['success'] = false;
$return['file']['dest'] = $destinationFolder.$filename;
$return['file']['size'] = $filesize;
if($file_error == 0)
$return['error'] = false;
// I added a directory creation function so you don't have to
// manually make folders. This will do it for you.
if(!is_dir($destinationFolder))
mkdir($destinationFolder,0755,true);
// If your filename is not empty, return success or fail of upload
if (!empty($filename))
$return['success'] = (move_uploaded_file($tmp_name, $destinationFolder.$filename));
return $return;
}
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
file_put_contents('error_log_top', "\n[{$date->format('Y-m-d H:i:s')}]" . "Error adding attachment: \n" . print_r($e, 1), FILE_APPEND);
}
编辑:我如何调用 uplaodFile 函数:
if(isset($_POST['create'])) {
// Try uploading
$upload = UploadFile($_FILES);
// If upload fails
if(!$upload['success']) {
echo '<h3>Sorry, an error occurred</h3>';
}
else {
// You could add error handling here based on the results of
// each function's success or failure below.
// Try to save it
$saveToDb = SaveToDb($con,$upload['file']['dest']);
// Get the profile from image name
$profPic = ($saveToDb)? getPhoto($con,$upload['file']['dest']) : false;
}
}
编辑 - 更新代码:
function UploadFile($fileArray, $destinationFolder = '../project_images/') {
$fileUploadData = $fileArray['file'];
$filename = $fileUploadData['name'];
$tmp_name = $fileUploadData['tmp_name'];
$filesize = $fileUploadData['size'];
$file_error = $fileUploadData['error'];
var_dump($filename);
// Save all the default data.
// Success and error should be set by default to fail
$return['error'] = true;
$return['success'] = false;
$return['file']['dest'] = $destinationFolder.$filename;
$return['file']['size'] = $filesize;
if($file_error == 0)
$return['error'] = false;
if(!is_dir($destinationFolder))
mkdir($destinationFolder,0755,true);
// If your filename is not empty, return success or fail of upload
if (!empty($filename))
$return['success'] = (move_uploaded_file($tmp_name, $destinationFolder.$filename));
return $return;
}
解决方案
这:(不起作用)
$filename = $fileArray[$fileNameVar];
$tmp_name = $fileArray[$fileTmpNameVar];
$filesize = $fileArray[$fileSizeVar];
$file_error = $fileArray[$fileErrorVar];
$file = $fileArray[$p_img];
与此不同:(将起作用)
$filename = $fileArray['file']['name'];
$tmp_name = $fileArray['file']['tmp_name'];
$filesize = $fileArray['file']['size'];
$file_error = $fileArray['file']['error'];
$file = $fileArray['file'];
在这段代码中,$fileArray 是一个数组数组。因此,您不能将其视为一维数组并期望从中获取实际值。
当你这样做时:
$p_img = $_FILES['file'];
$fileNameVar = $p_img['name'];
$fileTmpNameVar = $p_img['tmp_name'];
$fileSizeVar = $p_img['size'];
$fileErrorVar = $p_img['error'];
这些都是实际值。ie$fileNameVar
包含文件上传时的实际原始名称。
你可以做的是:
$fileUploadData = $fileArray['file'];
$filename = $fileUploadData['name'];
$tmp_name = $fileUploadData['tmp_name'];
$filesize = $fileUploadData['size'];
$file_error = $fileUploadData['error'];
// Other code goes here.
其他想法:
function UploadFile($fileArray = array(), $destinationFolder = '../project_images/')
应该:
function UploadFile($fileArray, $destinationFolder = '../project_images/')
有默认值是没有意义的。在这种情况下,如果数组为空,则没有什么明智的做法。
推荐阅读
- ios - Swift 的生命周期图是否与我们所知道的 Objective-C 相同?
- php - MYSQL 8.0 与 PHP 5.6 的连接
- javascript - 如何将输入中的单词添加到另一个输入表单
- python - Python中的马尔可夫转移概率矩阵实现
- c# - 尽管在一定数量的消息后数据可用,但读取流“冻结”
- c# - 作为样式的设置器值绑定到边距
- javascript - 如何使用sails v.1向postgresql数据库添加新记录?
- reactjs - 创建一个像 slack 一样的子域,例如:https://someteam.slack.com/ in REACT JS
- python - 如何在熊猫取消堆叠之前动态重命名列?
- python - f(a, *b) 的 Python 参数匹配