PHPExcel读取大型CSV失败

时间:2017-09-15 20:04:52

标签: php csv phpexcel

我正在尝试使用PHPExcel将csv导入到我的应用程序中,以便我可以将数据加载到表中。当文件达到2兆+时,代码失败。

我在WAMP64上运行Laravel。失败的代码是:

$objPHPExcel = PHPExcel_IOFactory::load(Input::file('file')->getRealPath());

错误消息是:

ErrorException: file_get_contents(C:\wamp\www\imax\public): failed to open stream: Permission denied in     C:\wamp\www\imax\vendor\phpoffice\phpexcel\Classes\PHPExcel\Shared\OLERead.php:85

我知道这是一个大小问题,因为当文件是2048K时代码正确完成。我可以在文件中添加一个字符,将其推送到2049K,然后失败。所以它不是权限问题。

OLERead.php中失败的行是:

// Get the file identifier
// Don't bother reading the whole file until we know it's a valid OLE file
$this->data = file_get_contents($sFileName, FALSE, NULL, 0, 8);

Wampserver 3.0.6

PHP 7.0.10

2 个答案:

答案 0 :(得分:0)

听起来你需要为PHP分配内存。您可以在运行时执行此操作或更改php.ini配置文件。

在运行时启动内存限制:

ini_set('memory_limit','16M');您可以随时将 16M 更改为您需要的内容。

永久更改

打开 php.ini 文件并查找此行upload_max_filesize = 2M;并将2M更改为您想要的内容。 (我也相信WAMP允许您通过右键单击图标并选择选项来编辑它)

注意:您可能只想搜索upload_max_filesize并省略= 2 M部分,因为您的部分可能不同。

答案 1 :(得分:0)

如果代码使用的是OLERead,那么您要么不读取大型CSV文件,要么读取BIFF格式的xls文件......或者您让PHPExcel尝试并识别文件类型本身。 ..如果你知道它是一个CSV文件,那么手动实例化CSV阅读器,而不是让PHPExcel尝试识别文件。

// Tell PHPExcel that you want to load a CSV file
$objReader = new PHPExcel_Reader_CSV();
// Load the $inputFileName to a PHPExcel Object
$objPHPExcel = $objReader->load(Input::file('file')->getRealPath());

但是,如果您知道自己正在使用CSV文件,那么使用PHP的原生CSV阅读功能fgetcsv()

会更有效率