Итак, у меня есть хороший работающий php-сервер, который открыл сокет AF_UNIX, используя эту небольшую функцию, которую я написал. Который так называется
$IPC_connector = socket_create_IPC('/tmp/connection');
function socket_create_IPC($FILE)
{
#Create a AF_UNIX socket
if(!($socket = socket_create(AF_UNIX, SOCK_STREAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
#Bind
if( !socket_bind($socket, $FILE) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
if(socket_listen($socket) === false)
{
die("socket_listen() failed: reason: " . socket_strerror(socket_last_error($socket)) . "\n");
}
socket_set_nonblock($socket);
return $socket;
}
Затем я написал клиент, который подключался к этому серверу следующим образом.
if(!($IPC = socket_create(AF_UNIX, SOCK_STREAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Error:Couldn't create socket - [$errorcode] $errormsg \n");
}
echo "socket_create(): ".socket_strerror(socket_last_error($IPC))."\n";
if(!(socket_connect($IPC, '/tmp/connection')))
echo "socket_connect() failed, reason: ".socket_strerror(socket_last_error($IPC))."\n";
Клиент фактически вызывается из запроса AJAX с веб-страницы, на которой он должен подключиться к серверу, получить некоторые данные, а затем вернуть эти данные обратно на веб-страницу. Запрос ajax выполняется в javascript. Я протестировал соединение клиент-сервер без запроса AJAX, и оно работает, но как только я пытаюсь установить соединение с помощью AJAX через веб-страницу, клиент возвращает "socket_connect() failed, причина: Отказано в доступе" из инструкции эха в скрипте. Может быть, я упускаю из виду какую-то маленькую оплошность? Я предполагаю, что Ajax вызывается через httpd (apache). Я уверен, что это, вероятно, какой-то тип прав доступа к файлам, но я не могу точно понять, что вызывает это.
Вещи, которые я пробовал до сих пор,
Убедился, что safe_mode отключен в php.ini, попробовал «setsebool -P httpd_can_network_connect on», чтобы попытаться помешать SElinux, также попробовал «setenforce 0», что тоже не имело никакого значения. Я попытался изменить права доступа к файлу / tmp и всем подкаталогам на 777, но безрезультатно. У меня заканчиваются идеи, и я подумал, что, может быть, кто-то видел эту проблему раньше, я также посмотрел на это, это файл, который создает мой сервер ->
[root@ip-000-000-000-000 tmp]# ls -lZa connection
srwxr-xr-x. root root unconfined_u:object_r:user_tmp_t:s0 connection
Если кого-то интересует вызов AJAX, я использую это
function communication (IP, MechanismID, CommandName) {
$.post('php/connectDisconnect.php', {
IP : IP,
MechanismID : MechanismID,
CommandName : CommandName
},
function(data) {
if(data.search("Error") != -1)
alert(data);
});
}
где connectDisconnect.php — клиент сверху.