php fsockopen - PullRequest
       32

php fsockopen

2 голосов
/ 13 декабря 2008

У меня есть простой скрипт php на сервере, который использует fsockopen для подключения к серверу.

<?php
$fp = fsockopen("smtp.gmail.com", 25, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    echo fgets($fp, 1024);
    fclose($fp);
}
?>

Проблема в том, что время ожидания сценария истекло и он не может подключиться. Если я изменить порт с 25 на 80, например, он работает без проблем на любом хосте. Таким образом, проблема, похоже, заключается только в порте 25, независимо от того, какой хост я использую, я перепробовал многие из них, и все они работают для порта 80 и других, но для 25 не удается. Соединения не блокируются брандмауэром, как если бы я telnet из оболочки, он успешно подключается к любому порту на любом хосте.
Есть идеи, в чем может быть проблема, ведь это действительно странно?

LE: Если я запускаю тот же php-скрипт из оболочки, php scriptname.php, он работает так, что только когда я запускаю его по http, это не получается. У меня есть Apache с SuPHP, так что проблема где-то здесь

Ответы [ 5 ]

2 голосов
/ 15 декабря 2008

Как и maxnk упомянутая межсетевая защита является наиболее вероятной проблемой, либо на сервере, либо у вашего интернет-провайдера. Порт 25 часто защищен брандмауэром для предотвращения спама.

Так же, как быстрый тест, поскольку вы упомянули gmail, вы можете вместо этого попробовать подключиться к порту 587. Gmail прослушивает smpt на этом альтернативном порте в дополнение к порту 25, чтобы помочь пользователям обойти чрезмерно ограничительные брандмауэры.

2 голосов
/ 13 декабря 2008

Интересно ... Некоторые брандмауэры могут блокировать соединения определенной программы с определенными портами. Пожалуйста, проверьте это снова, попробуйте полностью остановить брандмауэр. Также попробуйте остановить любое антишпионское ПО.

1 голос
/ 04 февраля 2010

В CentOS может быть включен SELinux, что может привести к странным соединениям. Вы проверили свои журналы ошибок?

1 голос
/ 15 декабря 2008

Я думаю, что проблема с подключением к вашей машине. Я просто скопировал ваш код в скрипт на моей машине (linux suse) и запустил его с помощью php -f test_script. Я получил следующее сообщение

220 mx.google.com ESMTP j8sm1814228gvb.0

1 голос
/ 14 декабря 2008

Я также столкнулся с некоторыми странными проблемами с обработкой сокетов в PHP. Это оказалось проблемой с системой, на которой он работал. Вы пытались запустить свой код на другом компьютере?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...