У меня есть большой файл (200 МБ вверх). Мне нужно перенести его через PHP cron job. Использование Phpseclib
дает следующее сообщение об ошибке:Передача большого файла через SFTP в PHP
Allowed memory size of 134217728 bytes exhausted (tried to allocate 4133 bytes) in /app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
Есть ли способ, что я могу сделать это с PHP cron job
?
код просто одна строка, где $ лок_файл является уже существующий файл CSV
$sftp->put('/Import/coupons/coupons_import_test.csv', $localFile, NET_SFTP_LOCAL_FILE);
PS. Это необходимо сделать после того, как PHP
создает этот файл в папке /tmp
, поэтому необходимо ввести время начала сценария передачи.
[Изменить] Я не намерен увеличивать ограничение памяти, так как позже файлы могут иметь более высокие размеры. Решение, в котором я могу передать файл по частям (режим добавления) или использовать какой-либо скрипт оболочки с PHP cron, может стоить
Размер файла на удаленном сервере составляет 111,4 МБ, а фактический файл намного больше на локальном.
[Edit после исправления] Проблема исчезла после того, как изменения в версии 2.0.2 от версии 1.0 мне пришлось модифицировать код для положить
$sftp->put('/Import/coupons/coupons_import.csv', $localFile, $sftp::SOURCE_LOCAL_FILE);
Возможный дубликат [Разрешенные размер памяти 33554432 байт исчерпаны (пытались выделить 43148176 байт) в PHP] (http://stackoverflow.com/questions/415801/allowed-memory-size-of-33554432-bytes-exhausted-tried-to-allocate-43148176-byte) –
Что у вашего php.ini есть ** memory_limit **? Обычно что-то вроде 64M или 128M, вам нужно увеличить это. – ggdx
Есть ли способ сделать это без увеличения лимита? – aeonsleo