PHP shell_exec System.OutOfMemoryException

Я использую модуль PowerShell ImportExcel для преобразования файлов Excel в файлы csv:

экспортCSV.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 КБ. Когда я использую файл размером всего 27 307 КБ, он также работает с PHP shell_exec(). Я уже проверил memory_limit в php.ini (256M), так что это не должно быть проблемой.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Объем памяти, который файл занимает на диске, не обязательно будет соответствовать размеру объектов данных после импорта. Особенно, если файлы xslx сжаты (не знаю, сжаты ли они)

Я бы рекомендовал временно увеличить memory_limit до 1024M и повторить попытку с testFile.xlsx, чтобы убедиться, что не требуется просто больше места для хранения импортированных данных в памяти.

Если это не сработает, это может быть ошибка в импортере, которая тратит память впустую.

изменен на 1024M, и ошибка все еще возникает.

Grobanix 22.12.2020 19:21

Последняя часть этого ответа кажется правильной. проверил использование памяти, запустив скрипт непосредственно в powershell, и во время работы он занимает более 1000 МБ памяти...

Grobanix 22.12.2020 20:20

Другие вопросы по теме