Тайм-аут выполнения PHP при загрузке большого файла в Google Drive с API
Я хочу загрузить локальный файл через PHP на Google Drive. Если я загружаю небольшой файл (<5 МБ), все работает. Если я хочу загрузить файл большего размера, я получаю "Неустранимая ошибка: превышено максимальное время выполнения 30 секунд". Я могу установить max_execution_time в моем php.ini на очень высокое значение, но это кажется плохим решением. Если я использую "set_time_limit(секунд);" Я не могу загрузить больше файлов одновременно (я не знаю почему).
Поэтому мой вопрос заключается в том, как загрузить большой файл без замены моего php.ini на неправильное время выполнения. Как это должно решить в PHP? Я хотел бы использовать простую команду CURL cli, но она не работает с Google Drive, потому что CURL не может поддерживать присягу.
2 ответа
Настройка max_execution_time
с set_time_limit
это правильное решение. Если для загрузки файла вашему сценарию потребуется более 30 секунд, он будет выполняться более 30 секунд.
set_time_limit(600); //File upload should not take longer than 10 minutes
do_your_file_upload();
set_time_limit(30); //Change it back to 30 seconds for further processing
Я не могу загрузить больше файлов одновременно
Можете ли вы указать, что вы имеете в виду?
Если вы не можете получить доступ к своему PHP-скрипту во время работы другого, это часто происходит из-за управления сессиями PHP. Когда вы начинаете сеанс с помощью session_start, PHP (создает и) открывает файл сеанса и блокирует его для записи. Файл будет заблокирован до тех пор, пока ваши скрипты не вызовут session_write_close или пока не закончится выполнение скрипта. Чтобы работать с двумя или более сессиями одновременно, вы должны вызвать session_write_close:
session_start();
//do stuff
session_write_close();
set_time_limit(600); //File upload schould not take longer than 10 minutes
do_your_file_upload();
set_time_limit(30); //Change it back to 30 seconds for further processing
session_start();
//do more stuff
session_write_close();
Это плохая идея использовать простой PHP-код для загрузки очень большого файла.
Вы должны использовать Javascript для загрузки больших файлов, потому что он использует методы AJAX. Кроме того, это позволит вам отображать индикатор выполнения.
Я сделал небольшое исследование. Вот несколько хороших сценариев, использующих jQuery: http://designscrazed.org/html5-jquery-file-upload-scripts/
Или другой скрипт, который не использует jQuery (я не использую, если он хороший): http://igstan.ro/posts/2009-01-11-ajax-file-upload-with-pure-javascript.html
Удачи!