我有一个PHP脚本,用于上传CSV文件,然后将csv文件的一些内容保存到数据库中。当我使用大约40kb的文件时,脚本中的所有内容都可以正常工作,大约有100行。但是,当我尝试上载一个类似结构的文件,该文件是850 kb的大,出现此错误消息:上传csv文件时出现php大小错误
阵列([型] => 2048 [消息] =>只有变量应该通过参考分配 [文件] => /home/dir_name/uploader.php [行] => 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
变量,因为我认为这可能是问题...但它没” t似乎改变了一切。任何有关这个问题的帮助将不胜感激。我希望能够使用此脚本上传BIG文件。 :-)
**编辑**
记住这个脚本效果很好,当该文件足够小。我用一个小文件(100行)再次尝试了它,它很好。我从第10行除去&,现在我在尝试一个更大的文件时,这个错误:
阵列([型] => 2048 [消息] =>只有变量应该被分配 通过引用[文件] => /home/dir_name/plugins/content/jw_simpleImageGallery/jw_simpleImageGallery.php [行] => 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
我想我不有权改变这些变量,但是默认情况下它们已经设置得非常高,所以看起来这些变量看起来不像850K文件。
**编辑3 **
我检查的$_FILES['uploadedfile']['tmp_name']
的价值,并为小FIEL(〜37 KB)我得到这样的输出:
/tmp/php7yto3f
但是当我尝试了850 KB文件它不输出任何该变量,然后我得到崩溃。所以似乎该文件没有被保存到较大文件大小的临时位置。
**编辑4 **
原来,这个问题是<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
必须由100,000字节,或100 KB,所以我增加该值和大文件的工作...: -/
非常感谢您的帮助,请参阅我的编辑 –
尝试打印$ _FILES [ 'UploadedFile的'] [ 'tmp_name']并查看文件是否存在。 – fonini
您确定可以使用ini_set()修改设置吗? – fonini