我正在尝试使用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
答案 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()
会更有效率