Tôi có tệp lớn (200 MB trở lên). Tôi cần phải chuyển nó qua công việc cron PHP. Sử dụng Phpseclib
cung cấp cho các lỗi sau:Chuyển tệp lớn qua SFTP bằng PHP
Allowed memory size of 134217728 bytes exhausted (tried to allocate 4133 bytes) in /app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
Có cách nào tôi có thể làm điều này với PHP cron job
?
Mã này là đơn giản một dòng trong đó $ localFile là một tập tin CSV đã tồn tại
$sftp->put('/Import/coupons/coupons_import_test.csv', $localFile, NET_SFTP_LOCAL_FILE);
PS. Điều này cần được thực hiện sau khi PHP
tạo tệp đó trong thư mục /tmp
để thời gian của tập lệnh chuyển phải được phát.
[Chỉnh sửa] Tôi không có ý định tăng giới hạn bộ nhớ vì các tệp sau có thể có kích thước cao hơn. Một giải pháp mà tôi có thể chuyển tệp ở các phần (chế độ nối thêm) hoặc sử dụng một số tập lệnh shell với PHP cron có thể đáng giá
Kích thước tệp trên máy chủ từ xa là 111,4 MB trong khi tệp thực tế lớn hơn nhiều ở cục bộ.
[Chỉnh sửa sau khi sửa chữa] Vấn đề này đã biến mất sau khi chuyển sang phiên bản 2.0.2 từ phiên bản 1.0 tôi đã phải sửa đổi mã cho đặt
$sftp->put('/Import/coupons/coupons_import.csv', $localFile, $sftp::SOURCE_LOCAL_FILE);
có thể trùng lặp của [Được phép kích thước bộ nhớ của 33.554.432 byte kiệt sức (cố gắng phân bổ 43.148.176 byte) trong php] (http://stackoverflow.com/questions/415801/cho phép-bộ nhớ-kích thước-of-33554432-byte-exhausted-cố gắng-để-phân bổ-43148176-byte) –
php.ini của bạn có như là ** memory_limit **? Thông thường một cái gì đó như 64M hoặc 128M, bạn cần phải tăng này. – ggdx
Có cách nào để làm điều này mà không tăng giới hạn? – aeonsleo