【问题标题】:PHPExcel reading large CSV is failingPHPExcel 读取大型 CSV 失败
【发布时间】:2017-09-15 20:04:52
【问题描述】:

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

我在 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

【问题讨论】:

  • 您是否尝试过在 php.ini 文件中更新 memory_limit?还有一条超时线和其他一些我会“向上”的线,但我不记得了。这可能会有所帮助:stackoverflow.com/questions/3829403/…
  • 内存限制为 512M。发现错误后加倍,没有变化。

标签: php csv phpexcel


【解决方案1】:

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

在运行时达到内存限制:

ini_set('memory_limit','16M'); 随意将 16M 更改为您需要的。

永久更改:

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

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

【讨论】:

  • 在出现错误之前,内存限制已设置为 512M。在我在这里记录问题之前,我没有改善就增加了它。
  • 还将 upload_max_filesize 从 2M 更改为 4M 再更改为 16M,但结果错误没有变化。
  • @JEberlan 可能是超时或不同的 php 选项。
【解决方案2】:

如果代码使用的是 OLERead,那么要么您读取的不是大型 CSV 文件,而是 BIFF 格式的 xls 文件……或者您让 PHPExcel 尝试识别文件类型本身……如果您知道它是一个 CSV 文件,然后手动实例化 CSV Reader,而不是让 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()

【讨论】:

  • 我更改为 PHPExcel_Reader_CSV 但它以类似的错误结束。 ErrorException: fopen(C:\wamp\www\imax\public): 无法打开流:C:\wamp\www\imax\vendor\phpoffice\phpexcel\Classes\PHPExcel\Reader\Abstract 中的权限被拒绝。 php:203 如此不同的代码,以相同的误导性消息失败。我从文件中删除了 1 个字符,它工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 2022-12-31
相关资源
最近更新 更多