ingres uses a string as port
- приведите его к int тогда.Вы, вероятно, также должны убедиться, что он на самом деле возвращает числовую строку в диапазоне (допустимые диапазоны портов для ipv4 и ipv6 - 1-65535. (порт 0 также существует, но недоступен в большинстве систем))
$port = "9999";
$old = $port;
if (false === ($port = filter_var ( $port, FILTER_VALIDATE_INT, array (
'options' => array (
'min_range' => 1,
'max_range' => 65535
)
) ))) {
throw new \LogicException ( "port is not a valid integer in range 1-65535! ($old)" );
}
// here, $port is guaranteed to be an int in range 1-65535.
Что касается параметров socket_connect, проверьте этот пример, подключившись к example.com через порт 80, чтобы загрузить на него html-сайт:
$fp = fsockopen ( "www.example.com", 80, $errno, $errstr, 30 );
if (! $fp) {
echo "error connecting: $errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite ( $fp, $out );
while ( ! feof ( $fp ) ) {
echo fgets ( $fp, 128 );
}
fclose ( $fp );
}
, который был взят из документации fsockopen.
и, наконец, у меня нет опыта работы с Ingres, но сырые tcp apis становятся чрезвычайно редкими. Вы уверены, что для Ingres нет доступных apis более высокого уровня?Редактировать: да, проверьте http://php.net/manual/en/book.ingres.php, использовать это расширение почти наверняка будет намного проще, чем использовать необработанные tcp сокеты