Php 如何将包含的$文件转换为数组?
如何解决此错误Php 如何将包含的$文件转换为数组?,php,arrays,codeigniter,foreach,Php,Arrays,Codeigniter,Foreach,如何解决此错误 A PHP Error was encountered Severity: Warning Message: Invalid argument supplied for foreach() Filename: admin/tour.php Line Number: 81 这是第81行: $files = $this->multi_upload->go_upload(); var_dump($files); $images = arr
A PHP Error was encountered
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: admin/tour.php
Line Number: 81
这是第81行:
$files = $this->multi_upload->go_upload();
var_dump($files);
$images = array();
foreach ($files as $img) { //line 81
$images[] = $img['file'];
}
这是顶级代码中的my$文件:
function go_upload($field = 'userfile') {
$CI =& get_instance();
// Is $_FILES[$field] set? If not, no reason to continue.
if ( ! isset($_FILES[$field]['name'][0]))
{
$CI->upload->set_error('upload_no_file_selected');
return FALSE;
} else
{
$num_files = count($_FILES[$field]['name']) -1;
$file_list = array();
$error_hold = array();
$error_upload = FALSE;
}
// Is the upload path valid?
if ( ! $CI->upload->validate_upload_path())
{
// errors will already be set by validate_upload_path() so just return FALSE
return FALSE;
}
for ($i=0; $i < $num_files; $i++) {
// $fname = $_FILES[$field]['name'][$i];
// echo "$fname\n\n<br><br>\n\n";
$error_hold[$i] = FALSE;
// Was the file able to be uploaded? If not, determine the reason why.
if ( ! is_uploaded_file($_FILES[$field]['tmp_name'][$i]))
{
$error = ( ! isset($_FILES[$field]['error'][$i])) ? 4 : $_FILES[$field]['error'][$i];
switch($error)
{
case 1: // UPLOAD_ERR_INI_SIZE
$error_hold[$i] = 'upload_file_exceeds_limit';
break;
case 2: // UPLOAD_ERR_FORM_SIZE
$error_hold[$i] = 'upload_file_exceeds_form_limit';
break;
case 3: // UPLOAD_ERR_PARTIAL
$error_hold[$i] = 'upload_file_partial';
break;
case 4: // UPLOAD_ERR_NO_FILE
$error_hold[$i] = 'upload_no_file_selected';
break;
case 6: // UPLOAD_ERR_NO_TMP_DIR
$error_hold[$i] = 'upload_no_temp_directory';
break;
case 7: // UPLOAD_ERR_CANT_WRITE
$error_hold[$i] = 'upload_unable_to_write_file';
break;
case 8: // UPLOAD_ERR_EXTENSION
$error_hold[$i] = 'upload_stopped_by_extension';
break;
default :
$error_hold[$i] = 'upload_no_file_selected';
break;
}
return FALSE;
}
// Set the uploaded data as class variables
$CI->upload->file_temp = $_FILES[$field]['tmp_name'][$i];
$CI->upload->file_name = $_FILES[$field]['name'][$i];
$CI->upload->file_size = $_FILES[$field]['size'][$i];
$CI->upload->file_type = preg_replace("/^(.+?);.*$/", "\\1", $_FILES[$field]['type'][$i]);
$CI->upload->file_type = strtolower($CI->upload->file_type);
$CI->upload->file_ext = $CI->upload->get_extension($_FILES[$field]['name'][$i]);
// Convert the file size to kilobytes
if ($CI->upload->file_size > 0)
{
$CI->upload->file_size = round($CI->upload->file_size/1024, 2);
}
// Is the file type allowed to be uploaded?
if ( ! $CI->upload->is_allowed_filetype())
{
$error_hold[$i] = 'upload_invalid_filetype';
}
// Is the file size within the allowed maximum?
if ( ! $CI->upload->is_allowed_filesize())
{
$error_hold[$i] = 'upload_invalid_filesize';
}
// Are the image dimensions within the allowed size?
// Note: This can fail if the server has an open_basdir restriction.
if ( ! $CI->upload->is_allowed_dimensions())
{
$error_hold[$i] = 'upload_invalid_dimensions';
}
// Sanitize the file name for security
$CI->upload->file_name = $CI->upload->clean_file_name($CI->upload->file_name);
// Remove white spaces in the name
if ($CI->upload->remove_spaces == TRUE)
{
$CI->upload->file_name = preg_replace("/\s+/", "_", $CI->upload->file_name);
}
/*
* Validate the file name
* This function appends an number onto the end of
* the file if one with the same name already exists.
* If it returns false there was a problem.
*/
$CI->upload->orig_name = $CI->upload->file_name;
if ($CI->upload->overwrite == FALSE)
{
$CI->upload->file_name = $CI->upload->set_filename($CI->upload->upload_path, $CI->upload->file_name);
if ($CI->upload->file_name === FALSE)
{
$error_hold[$i] = TRUE;
}
}
/*
* Move the file to the final destination
* To deal with different server configurations
* we'll attempt to use copy() first. If that fails
* we'll use move_uploaded_file(). One of the two should
* reliably work in most environments
*/
if ( ! @copy($CI->upload->file_temp, $CI->upload->upload_path.$CI->upload->file_name))
{
if ( ! @move_uploaded_file($CI->upload->file_temp, $CI->upload->upload_path.$CI->upload->file_name))
{
$error_hold[$i] = 'upload_destination_error';
}
}
/*
* Run the file through the XSS hacking filter
* This helps prevent malicious code from being
* embedded within a file. Scripts can easily
* be disguised as images or other file types.
*/
if ($CI->upload->xss_clean == TRUE)
{
$CI->upload->do_xss_clean();
}
if ($error_hold[$i]) {
$error_upload = TRUE;
// echo $error_hold[$i];
} else {
if ($imageVar = $this->multiple_image_properties($CI->upload->upload_path.$CI->upload->file_name)) {
$file_list[] = array(
'name' => $CI->upload->file_name,
'file' => $CI->upload->upload_path.$CI->upload->file_name,
'size' => $CI->upload->file_size,
'ext' => $CI->upload->file_ext,
'image_type' => $imageVar->image_type,
'height' => $imageVar->height,
'width' => $imageVar->width
);
} else {
$file_list[] = array(
'name' => $CI->upload->file_name,
'file' => $CI->upload->upload_path.$CI->upload->file_name,
'size' => $CI->upload->file_size,
'type' => $CI->upload->file_type,
'ext' => $CI->upload->file_ext,
);
}
}
// For debugging
/*
if (strlen($error_hold[$i]) > 1) {
print_r($error_hold);
}
*/
} // end for loop
// Add error display for individual files
if ($error_upload) {
$this->set_error($error_hold);
return FALSE;
} else {
return $file_list;
}
}
函数go\u upload($field='userfile'){
$CI=&get_instance();
//是否设置了$\u FILES[$field]?如果未设置,则没有理由继续。
如果(!isset($\u文件[$field]['name'][0]))
{
$CI->upload->set_error('upload_no_file_selected');
返回FALSE;
}否则
{
$num_files=count($_files[$field]['name'])-1;
$file_list=array();
$error_hold=array();
$error\u upload=FALSE;
}
//上传路径有效吗?
如果(!$CI->上传->验证上传路径())
{
//validate_upload_path()已经设置了错误,所以只需返回FALSE即可
返回FALSE;
}
对于($i=0;$i<$num_文件;$i++){
//$fname=$_文件[$field]['name'][$i];
//回显“$fname\n\n
\n\n”;
$error_hold[$i]=FALSE;
//文件是否可以上载?如果不能,请确定原因。
如果(!是上传的文件($文件[$field]['tmp\u name'][$i]))
{
$error=(!isset($\u文件[$field]['error'][$i])?4:$\u文件[$field]['error'][$i];
开关($error)
{
案例1://UPLOAD\u ERR\u INI\u大小
$error_hold[$i]=“上传文件超出限制”;
打破
案例2://UPLOAD\u ERR\u FORM\u SIZE
$error_hold[$i]=“上传文件超过表单限制”;
打破
案例3://UPLOAD\u ERR\u PARTIAL
$error_hold[$i]=“上传文件”\u partial”;
打破
案例4://UPLOAD\u ERR\u NO\u文件
$error_hold[$i]=“未选择上载文件”;
打破
案例6://UPLOAD\u ERR\u NO\u TMP\u DIR
$error_hold[$i]=“上传临时目录”;
打破
案例7://上传\错误\无法写入
$error_hold[$i]=“上传_无法_写入_文件”;
打破
案例8://上传错误扩展
$error_hold[$i]=“上传_已被_扩展停止”;
打破
违约:
$error_hold[$i]=“未选择上载文件”;
打破
}
返回FALSE;
}
//将上传的数据设置为类变量
$CI->upload->file_temp=$_FILES[$field]['tmp_name'][$i];
$CI->upload->file_name=$_FILES[$field]['name'][$i];
$CI->upload->file_size=$_FILES[$field]['size'][$i];
$CI->upload->file_type=preg_replace(“/^(+?);.$/”,“\\1”,$_FILES[$field]['type'][$i]);
$CI->upload->file\u type=strtolower($CI->upload->file\u type);
$CI->upload->file_ext=$CI->upload->get_扩展名($_FILES[$field]['name'][$i]);
//将文件大小转换为KB
如果($CI->上载->文件大小>0)
{
$CI->upload->file\u size=round($CI->upload->file\u size/1024,2);
}
//是否允许上载文件类型?
如果(!$CI->upload->允许使用文件类型())
{
$error_hold[$i]=“上传文件类型无效”;
}
//文件大小是否在允许的最大值内?
如果(!$CI->上载->允许文件大小())
{
$error_hold[$i]=“上传文件大小无效”;
}
//图像尺寸是否在允许的范围内?
//注意:如果服务器有open_basdir限制,则此操作可能失败。
如果(!$CI->上载->允许使用维度())
{
$error_hold[$i]=“上传无效的_维度”;
}
//为安全起见,请清理文件名
$CI->upload->file\u name=$CI->upload->clean\u file\u name($CI->upload->file\u name);
//删除名称中的空格
如果($CI->upload->remove_spaces==TRUE)
{
$CI->upload->file\u name=preg\u replace(“/\s+/”、“\u”、$CI->upload->file\u name);
}
/*
*验证文件名
*此函数用于将数字附加到
*如果已存在同名文件,则返回该文件。
*如果返回false,则存在问题。
*/
$CI->upload->orig\u name=$CI->upload->file\u name;
如果($CI->上载->覆盖==FALSE)
{
$CI->upload->file\u name=$CI->upload->set\u filename($CI->upload->upload\u path,$CI->upload->file\u name);
如果($CI->上载->文件名===FALSE)
{
$error_hold[$i]=TRUE;
}
}
/*
*将文件移动到最终目标
*处理不同的服务器配置
*我们将首先尝试使用copy()。如果失败
*我们将使用move_uploaded_file()。其中一个应该
*在大多数环境中都能可靠地工作
*/
如果(!@copy($CI->upload->file\u temp,$CI->upload->upload\u path.$CI->upload->file\u name))
{
如果(!@move\u upload\u file($CI->upload->file\u temp,$CI->upload->upload\u path.$CI->upload->file\u name))
{
$error_hold[$i]=“上传_目的地_error”;
}
}
/*
*通过XSS黑客过滤器运行该文件
*这有助于防止恶意代码被删除
*嵌入到文件中。脚本可以轻松
*伪装成图像或其他文件类型。
*/
if ($files !== FALSE)
$files = (array) $this->multi_upload->go_upload();
foreach ($files as $img) { //line 81
echo $img; // echo the Var and you will see..
}
if (count($files) > 0)
{
foreach ($files as $img) { //line 81
$images[] = $img['file'];
}
}
$files = $this->multi_upload->go_upload();
echo '<pre>';
echo "Files:\n";
print_r($files);
echo '</pre>';
$images = array();
foreach ($files as $img) { //this is line 80
$images[] = $img['file'];
}
if ( ! $files )
{
$this->session->set_flashdata('error', $this->upload->display_errors());
redirect('admin/tour/insert_foreign');
}
<?php echo form_open_multipart('upload/multiple_upload');?>
<input type="file" name="userfile[]" size="20" /><br />
<input type="file" name="userfile[]" size="20" /><br />
</form>
function multiple_upload()
{
$config['upload_path'] = './userpics/originals/'; // server directory
$config['allowed_types'] = 'gif|jpg|png'; // by extension, will check for whether it is an image
$config['max_size'] = '512'; // in kb
//$config['max_width'] = '1024';
//$config['max_height'] = '768';
$this->load->library('myupload');
$error = array(); $data = array();
for ($i=0;$i<count($_FILES['userfile']['name']);$i++) {
$this->myupload->initialize($config);
if (!$this->myupload->do_upload('userfile',$i)) {
$error[] = $this->myupload->display_errors();
}
$data[$i] = $this->myupload->data(); //gradually build up upload->data()
}
if ( count($error) > 0 )
{
print_r($error);
}
else
{
print_r($data);
}
}
public function do_upload($field = 'userfile')
public function do_upload($field = 'userfile', $i = 0)
is_uploaded_file($_FILES[$field]['tmp_name'])
is_uploaded_file($_FILES[$field]['tmp_name'][$i])