我有一个PHP脚本,可以上传CSV文件,然后将csv文件的一些内容保存到数据库中。当我使用大约40 kb,大约100行的文件时,脚本上的所有内容都能正常工作。但是当我尝试上传类似850 kb或更大的结构化文件时,我收到此错误消息:
数组([type] => 2048 [message] =>只应分配变量 通过引用[file] => /home/dir_name/uploader.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行)再次尝试了它,它很好。我删除了&amp;从第10行开始,现在我在尝试更大的文件时遇到此错误:
数组([type] =&gt; 2048 [message] =&gt;只应分配变量 通过引用[file] =&gt; /home/dir_name/plugins/content/jw_simpleImageGallery/jw_simpleImageGallery.php [line] =&gt; 32)
第28行的函数error_get_last
抛出此错误,这意味着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
我想我没有更改这些变量的权限,但默认情况下它们已设置得非常高,所以看起来这些变量看起来不像850 k文件。
**编辑3 **
我检查了$_FILES['uploadedfile']['tmp_name']
的值,对于小场(~37 kb),我得到了这个输出:
/tmp/php7yto3f
但是当我尝试850 KB文件时,它不会为该变量输出任何内容,然后我就会崩溃。因此,似乎文件没有保存到临时位置以获得更大的文件大小。
**编辑4 **
问题原来是<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
那必须是10万字节,或100 kb,所以我增加了这个值,更大的文件工作......: - /
答案 0 :(得分:2)
我认为问题出在第10行:
$user =& JFactory::getUser();
尝试删除“&amp;”。
答案 1 :(得分:1)
您是否阅读过该错误?
第10行:
$user =& JFactory::getUser();
从&
删除& JFactory
,这是旧的PHP4风格