我使用這個奇怪的代碼上傳檔案:
if (!empty($_FILES['file']['name']) && count(array_filter($_FILES['file']['name'])) > 0) {
$filesCount = count($_FILES['file']['name']);
for ($i = 0; $i < $filesCount; $i ) {
$_FILES['file']['name'] = $_FILES['file']['name'][$i];
$_FILES['file']['type'] = $_FILES['file']['type'][$i];
$_FILES['file']['tmp_name'] = $_FILES['file']['tmp_name'][$i];
$_FILES['file']['error'] = $_FILES['file']['error'][$i];
$_FILES['file']['size'] = $_FILES['file']['size'][$i];
/* File upload configuration */
$uploadPath = 'uploads/reviews/';
$config['upload_path'] = $uploadPath;
$config['allowed_types'] = 'jpg|jpeg|png|gif';
/* $config['max_size'] = '100'; */
/* $config['max_width'] = '1024'; */
/* $config['max_height'] = '768'; */
/* Load and initialize upload library */
$this->load->library('upload', $config);
$this->upload->initialize($config);
/* Upload file to server */
if ($this->upload->do_upload('file')) {
/* Uploaded file data */
$fileData = $this->upload->data();
$uploadData[$i]['file_name'] = $fileData['file_name'];
$uploadData[$i]['uploaded_on'] = date("Y-m-d H:i:s");
} else {
}
}
}
但我想知道為什么它會重寫 a$_FILES
以及為什么我會在線出錯:
`$_FILES['file']['error'] = $_FILES['file']['error'][$i];`
錯誤是:
Message: Trying to access array offset on value of type int
uj5u.com熱心網友回復:
您收到錯誤是因為您正在回圈一個陣列并在回圈中修改同一個陣列。
$_FILES['file']['error'][$i]
是一個整數,所以在回圈的第一次迭代中$_FILES['file']['error']
變成一個整數。
在回圈的第二次迭代中,當您嘗試訪問時$_FILES['file']['error'][$i]
,它試圖將現在位于的整數$_FILES['file']['error']
視為陣列并獲取元素[$i]
,這是不可能的。
(您在 , 上沒有收到此錯誤,$_FILES['file']['name'][$i]
因為檔案,$_FILES['file']['type'][$i]
和是字串值。$_FILES['file']['tmp_name'][$i]
name
type
tmp_name
當您嘗試將字串值視為陣列時,它將獲取 position 處的字符[$i]
。這可能也不是您想要的,但它不會給出錯誤。)
解決方案是復制$_FILES
陣列并遍歷副本,同時將值分配回$_FILES
陣列,如此處接受的答案:https ://stackoverflow.com/a/11539061/3960296
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/470292.html