I have to build a php website which has to connect to an Ingres database server.
Я скачал sourceforge pjbs мост JDBC-PHP.
Я установил это в папке проекта и попытался подключиться к моей базе данных ingres. Я не понимаю, какие параметры нужны fsockopen (), для сервера баз данных (VMS-сервера) я использую vnode, но ingres использует строку в качестве порта, а fsockopen хочет иметь целое число.
я использую
php 7.2.3 на Windows 7
Ingres 9.2 на HP OpenVMS v.8.4
<?php
require "lib/PJBridge.php";
function get_connection()
{
$connStr = "jdbc:ingres://vnode:II7/dbname";
$db = new PJBridge();
$result = $db->connect($connStr, $user, $password);
if(!$result){
die("Failed to connect");
}
return $result;}
<?php
class PJBridge {
private $sock;
private $jdbc_enc;
private $app_enc;
public $last_search_length = 0;
function __construct($host="vnode", $port=-1, $jdbc_enc="ascii", $app_enc="ascii") {
$this->sock = fsockopen($host, $port);
$this->jdbc_enc = $jdbc_enc;
$this->app_enc = $app_enc;
}
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 становится чрезвычайно редким, вы уверены, что нет доступного apis более высокого уровня для Ingres? Изменить: да, проверить http://php.net/manual/en/book.ingres.php , использование этого расширения почти наверняка будет намного проще, чем использование необработанных TCP-сокетов.
Других решений пока нет …