【问题标题】:PHP shell_exec System.OutOfMemoryExceptionPHP shell_exec System.OutOfMemoryException
【发布时间】:2020-12-22 16:59:09
【问题描述】:

我使用 PowerShell 模块 ImportExcel 将 Excel 文件转换为 csv 文件:

exportCSV.ps1:

Param(
    [string]$cInput,
    [string]$cOutput,
    [string]$cSheet
)

if (!$cInput -Or !$cOutput -Or !$cSheet) { Write-Host "failed" }
else {
    try {
        Import-Excel -WorksheetName $cSheet -Path $cInput -NoHeader | Export-Csv $cOutput -NoTypeInformation -encoding utf8
        Write-Host "done"
    } catch {
        Write-Host $error
    }
    
}

运行脚本的命令:

powershell -File "D:\test\exportCSV.ps1" -cInput "D:\test\testFile.xlsx" -cOutput "D:\test\testFile.csv" -cSheet "Sheet 1"

当我直接在 cmd 中运行此脚本时,它可以正常工作。但是当我在 php 中使用shell_exec() 运行时,出现以下错误:

Exception calling "Load" with "1" argument(s): "Exception of type 'System.OutOfMemoryException' was thrown." 

testFile.xlsx 有 91,094 KB。当我使用只有 27,307 KB 的文件时,它也适用于 PHP 的 shell_exec()。我已经在php.ini (256M) 中检查了memory_limit,所以这应该不是问题。

【问题讨论】:

    标签: php excel powershell shell-exec


    【解决方案1】:

    文件在磁盘上占用的内存量不一定与导入后的数据对象的大小相匹配。特别是如果 xslx 文件被压缩(不知道是否压缩)

    我建议暂时将 memory_limit 提高到 1024M,然后使用 testFile.xlsx 再次尝试,以确保不仅需要更多空间来将导入的数据存储在内存中。

    如果这不起作用,则可能是导入器中的错误正在浪费内存。

    【讨论】:

    • 改成1024M还是报错。
    • 这个答案的最后一部分似乎是正确的。检查直接在powershell中运行脚本的内存使用情况,它在运行时占用了超过1000MB的内存......
    猜你喜欢
    • 2011-06-23
    • 2011-10-28
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2011-04-02
    相关资源
    最近更新 更多