Друзья. Подскажите, пожалуйста, как побороть проблему. Исходные данные: Windows Server 2012 R2 PHP 7.4.26 php_ssh2.dll версии 7.4.13 дистрибутив версии 1.3.1, взятый тут: https://pecl.php.net/package/ssh2 Проблема: функция ssh2_scp_send при отправке на удаленный сервер по непонятным причинам иногда намертво зависает Подробное описание: есть удаленный сервер, на который я периодически отправляю разные файлы. Файлы разного размера, но не супер большие: от 100 кб до 10 Мб. В 99.9% процентов случаев все проходит гладко: маленькие файлы загружаются моментально, большие - чуть подольше, но тоже успешно. Но вот проблема, иногда, т.е. реально очень не часто после вызова ssh2_scp_send загрузка намертво зависает. Почему это происходит - понять не могу. Но основная беда в том, что я не знаю обходного решения. Меня даже вполне бы устроило грохать скрипт, если он выполняется больше N секунд и для этого я пытался применить set_time_limit(), но потом понял, что это не помогает (если зависание случилось на ssh2_scp_send, то set_time_limit() не отстреливает скрипт). И если грохнуть скрипт вручную, то все сразу же продолжает работать. Фрагмент кода я привожу ниже. PS К сожалению, получить диагностическую информацию с сервера, на который осуществляется загрузка, не представляется возможным. PPS Из забавного. Этот самый вопрос я попытался задать GPT-боту и он мне с уверенностью отвечает, что функция ssh2_scp_send в последней версии библиотеки имеет параметр "таймаут" (6ой по счету), но я нигде не нашел информации на этот счет и, как ожидалось, если задать в ssh2_scp_send больше 4х параметров, появляется соответствующая диагностика о том, что параметров не может быть больше 4. Похоже GPT-бот это выдумал Буду благодарен за любые рекомендации, быть может есть другие библиотеки, где таких проблем нет? file_put_contents($log_file, date("Y-m-d H:i:s") . ": Starting uploading files via FTP \n", FILE_APPEND); set_time_limit(300); $connection = ssh2_connect('192.168.1.1', 22); if (false === $connection) { file_put_contents($log_file, date("Y-m-d H:i:s") . ": Error during FTP connection \n", FILE_APPEND); } else { $auth = @ssh2_auth_password($connection, 'login', 'password'); if (false === $auth) { file_put_contents($log_file, date("Y-m-d H:i:s") . ": Error during FTP authentification \n", FILE_APPEND); } else { file_put_contents($log_file, date("Y-m-d H:i:s") . ": ".$html_file_name." lets try to upload \n", FILE_APPEND); $b=ssh2_scp_send($connection, $dir."/".$html_file_name, "folder_name/".$html_file_name, 0644); if ($b) { file_put_contents($log_file, date("Y-m-d H:i:s") . ": ".$html_file_name." upload OK \n", FILE_APPEND); } else { file_put_contents($log_file, date("Y-m-d H:i:s") . ": ".$html_file_name." upload ERROR \n", FILE_APPEND); } } $disconnection = ssh2_disconnect($connection); }
Ни у кого не будет идей по обозначенному вопросу? Может кто-то сможет предложить альтернативную, более надежную библиотеку? Заранее благодарю