У меня есть этот действительно простой кусочек PHP, который подключается через FTP для получения файла. Это выглядит так:
error_reporting(-1);
ini_set("display_errors", 1);
$ftp_server = "xxxx";
$ftp_user = "xxxx";
$ftp_pass = "xxxx";
$conn_id = ftp_connect($ftp_server);
if (ftp_login($conn_id, $ftp_user, $ftp_pass))
{
echo "Connected successfully as $ftp_user@$ftp_server<br>\n";
ftp_pasv($conn_id, true);
if ( ftp_chdir($conn_id, '/mydir') )
{
echo "Changed directory successfully<br>\n";
if (ftp_get($conn_id, '/full/path/to/local.file', 'remote.file', FTP_ASCII))
{
echo "Got file successfully. No problems here<br>\n";
}
else
{
echo "Uh oh. Problems getting file<br>\n";
print_r(error_get_last());
}
}
else
{
echo "Couldn't change directory<br>\n";
}
} else {
echo "Couldn't connect as $ftp_user<br>\n";
}
// close the connection
ftp_close($conn_id);
Создание автономного файла PHP с этим прекрасно работает. Он подключается, входит в систему и получает файлы. Никаких ошибок.
Теперь я беру тот же самый кусок кода, не внося никаких изменений, и помещаю его в плагин WordPress, и он больше не работает. Вместо этого я получаю:
Предупреждение: ftp_get (): php_connect_nonb () не выполнен: операция в процессе (115) в /path/to/file/cron.php в строке xx
Предупреждение: ftp_get (): введите значение A. в /path/to/file/cron.php в строке xx
Я провел большой поиск по предупреждению php_connect_nonb, и все они предполагают, что это связано с брандмауэром, но как это может работать, когда это отдельный скрипт.
Есть ли у кого-нибудь логические рассуждения о том, как это может быть возможно и почему он внезапно перестанет работать, если его поместить в WP? У меня совершенно нет идей.