Добрый день. У меня возникла такая проблема. Для создания и тестирования страницы использовал связку Apache24 и php55 установленную на мой компьютер по windows. на компьютере написанный код страницы отрабатывает правильно. Но когда я перенес страницу на сервер в локальной сети. при отправке проходит только первая строка заголовка POST запроса. Смысл кода в том что сервер должен получить POST запрос от браузера. Получить из него необходимые переменные и передать их POST запросом на контроллер в локальной сети. Привожу исполняемый код Код (Text): if ($_POST["SendID"]="LGTV"){ $Kod=$_POST["Key"]; //echo $Kod SendArduino($Kod); } function SendArduino($Cod){ //открываем сокет к http://www.example.loc на 80-й порт с таймаутом в 30 секунд $socket = fsockopen('192.168.1.100', 80, $errno, $errstr, 100); //если fsockopen вернула false, то завершаем работу скрипта и выводим текст и номер ошибки if(!$socket)die("$errstr($errno)"); //собираем данные $data = "#cmd=".urlencode($Cod); //пишем в сокет метод, URI и протокол fwrite($socket, "POST /post/test.php HTTP/1.1\r\n"); if(!$socket)die("$errstr($errno)"); echo ("$errstr($errno)"); //а также имя хоста fwrite($socket, "Host: 192.168.1.100\r\n"); //теперь отправляем заголовки //Content-type должен быть applicaion/x-www-form-urlencoded fwrite($socket,"Content-type: application/x-www-form-urlencoded\r\n"); //размер передаваемых данных передаем в заголовке Content-length fwrite($socket,"Content-length:".strlen($data)."\r\n"); //типы принимаемых данных. */* означает, что принимаем все типы данных fwrite($socket,"Accept:*/*\r\n"); //представимся оперой fwrite($socket,"User-agent:Opera 10.00\r\n"); fwrite($socket,"Connection:Close\r\n"); fwrite($socket,"\r\n"); //теперь передаем данные fwrite($socket,"$data\r\n"); fwrite($socket,"\r\n"); //теперь читаем и выводим ответ $answer = ''; while(!feof($socket)){ $answer.= fgets($socket, 4096); } echo $answer; //закрываем сокет fclose($socket); В чем может быть дело?
Код (Text): $socket = fsockopen('192.168.1.100', 80, $errno, $errstr, 100); что то я далек от мысли что это IP адрес сервера
Да это адрес сервера точнее контролера arduino, и соединение проходит без ошибок. Даже отправляется первая строка заголовка(контроллер её получает) - POST /post/test.php HTTP/1.1\r\n Я попробовал собрать сначала все сообщение а потом за одну отправку отправить. И тогда контроллер все принял правильно. Но вопрос почему с локального компьютера Windows7(Apache24+PHP55) работала отправка в несколько приемов а на FreeBSD(Apache24+PHP55) нет
Код (PHP): ini_set('display_errors',1); error_reporting(E_ALL); ну и напомню: fwrite() returns the number of bytes written, or FALSE on error. А также то, что лучше подготовить "посылку" и 1 раз заслать.