上传csv文件时出现php大小错误


php size error when uploading csv file

我有一个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_filesizememory_limitpost_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样式