我有一个PHP脚本,它上传一个CSV文件,然后将CSV文件的一些内容保存到数据库中。当我使用一个大约40kb,大约100行的文件时,脚本上的一切都很好。但当我试图上传一个类似的850 kb及更大的结构化文件时,我收到了以下错误消息:
数组([类型]=>2048[消息]=>只应分配变量通过引用[file]=>/home/dir_name/uploloader.php[line]=>10)
它是从error_get_last()
函数输出的。
这是我正在使用的脚本:
<?php
/*
* Config
*/
mysql_connect(/* creds */) or die(mysql_error());
mysql_select_db('db_name');
$user =& JFactory::getUser();
$user_id = $user->get('id');
ini_set('error_log','/home/dir_name/error.log');
ini_set('upload_max_filesize', '50M');
ini_set('memory_limit','32M');
ini_set('post_max_size','32M');
/*
* Upload CSV File
*/
if (isset($_FILES['uploadedfile'])){
if (substr($_FILES['uploadedfile']['name'],-3,3) == "csv"){
echo $_FILES['uploadedfile']['name']."<br/>";
$thefile = fopen($_FILES['uploadedfile']['tmp_name'],'r');
if ($thefile === false){
print_r(error_get_last());
exit;
}
while (($data = fgetcsv($thefile, 0, ";",'"')) !== FALSE) {
if($data[0] == "Item Number"){
continue;
}
/*
* Do all the stuff to data and save to db
*/
...
...
}
//header("Location: ".$_SERVER['PHP_SELF']);
}
}
?>
<form enctype="multipart/form-data" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose your CSV file of inventory: <input name="uploadedfile" type="file" />
<input type="submit" value="Upload File" />
</form>
正如您所看到的,我手动设置了upload_max_filesize
、memory_limit
和post_max_size
变量,因为我认为这可能是问题所在。。。但这似乎并没有改变什么。如果能为我们解决这个问题提供帮助,我们将不胜感激。我希望能够用这个脚本上传BIG文件。:-)
**编辑**
请记住,当文件足够小时,此脚本运行良好。我用一个小文件(100行)再试了一次,效果很好。我删除了&从第10行开始,现在我在尝试更大的文件时遇到了这个错误:
数组([类型]=>2048[消息]=>只应分配变量通过引用[file]=>/home/dir_name/plugins/content/jw_simpleImageGallery/jw_simpleImageGallery.php[line]=>32)
这个错误是由函数error_get_last
在第28行抛出的,这意味着fopen
函数返回了FALSE
。打开上传的文件肯定是个问题。出于某种原因,error_get_last
函数显示了与文件上传无关的错误(我认为它们是警告)。
**编辑2*
我检查了PHP ini变量的值,如下所示:
ini_set('error_log','/home/pkind2/tim/error.log');
ini_set('upload_max_filesize', '50M');
ini_set('memory_limit','32M');
ini_set('post_max_size','32M');
echo ini_get('upload_max_filesize').'<br>';
echo ini_get('memory_limit').'<br>';
echo ini_get('post_max_size').'<br>';
输出为:
100 M
50 M
100 M
我想我没有更改这些变量的权限,但默认情况下,它们已经设置得很高了,所以看起来这些变量不会妨碍850k文件。
**编辑3**
我检查了$_FILES['uploadedfile']['tmp_name']
的值,对于小字段(~37kb),我得到了以下输出:
/tmp/php7yto3f
但当我尝试850 KB的文件时,它不会为该变量输出任何内容,然后我就崩溃了。因此,文件似乎没有保存到临时位置,以获得更大的文件大小。
**编辑4**
问题是<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
必须增加100000字节或100kb,所以我增加了这个值,更大的文件就工作了…://
我认为问题出在第10行:
$user =& JFactory::getUser();
尝试删除"&"。
您读到错误了吗?
第10行:
$user =& JFactory::getUser();
从& JFactory
中删除&
,即旧的PHP4样式