За последние 24 часа нас посетили 16683 программиста и 1678 роботов. Сейчас ищут 942 программиста ...

Закрывается соединение при отправке POST

Тема в разделе "Прочие вопросы по PHP", создана пользователем slbond86, 6 апр 2014.

  1. slbond86

    slbond86 Новичок

    С нами с:
    6 апр 2014
    Сообщения:
    2
    Симпатии:
    0
    Добрый день. У меня возникла такая проблема.
    Для создания и тестирования страницы использовал связку Apache24 и php55 установленную на мой компьютер по windows.
    на компьютере написанный код страницы отрабатывает правильно. Но когда я перенес страницу на сервер в локальной сети. при отправке проходит только первая строка заголовка POST запроса.

    Смысл кода в том что сервер должен получить POST запрос от браузера. Получить из него необходимые переменные и передать их POST запросом на контроллер в локальной сети.

    Привожу исполняемый код
    Код (Text):
    1.  
    2.  if ($_POST["SendID"]="LGTV"){
    3.     $Kod=$_POST["Key"];
    4.     //echo $Kod
    5.     SendArduino($Kod);
    6.  }
    7.  
    8.  
    9.  
    10. function SendArduino($Cod){
    11. //открываем сокет к http://www.example.loc на 80-й порт с таймаутом в 30 секунд
    12. $socket = fsockopen('192.168.1.100', 80, $errno, $errstr, 100);
    13. //если fsockopen вернула false, то завершаем работу скрипта и выводим текст и номер ошибки
    14. if(!$socket)die("$errstr($errno)");
    15. //собираем данные
    16. $data = "#cmd=".urlencode($Cod);
    17. //пишем в сокет метод, URI и протокол
    18. fwrite($socket, "POST /post/test.php HTTP/1.1\r\n");
    19. if(!$socket)die("$errstr($errno)");
    20. echo ("$errstr($errno)");
    21. //а также имя хоста
    22. fwrite($socket, "Host: 192.168.1.100\r\n");
    23. //теперь отправляем заголовки
    24. //Content-type должен быть applicaion/x-www-form-urlencoded
    25. fwrite($socket,"Content-type: application/x-www-form-urlencoded\r\n");
    26. //размер передаваемых данных передаем в заголовке Content-length
    27. fwrite($socket,"Content-length:".strlen($data)."\r\n");
    28. //типы принимаемых данных. */* означает, что принимаем все типы данных
    29. fwrite($socket,"Accept:*/*\r\n");
    30. //представимся оперой
    31. fwrite($socket,"User-agent:Opera 10.00\r\n");
    32. fwrite($socket,"Connection:Close\r\n");
    33. fwrite($socket,"\r\n");
    34.  
    35. //теперь передаем данные
    36. fwrite($socket,"$data\r\n");
    37. fwrite($socket,"\r\n");
    38.  
    39. //теперь читаем и выводим ответ
    40. $answer = '';
    41. while(!feof($socket)){
    42.     $answer.= fgets($socket, 4096);
    43. }
    44. echo $answer;
    45.  
    46. //закрываем сокет
    47. fclose($socket);
    В чем может быть дело?
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Код (Text):
    1. $socket = fsockopen('192.168.1.100', 80, $errno, $errstr, 100);
    что то я далек от мысли что это IP адрес сервера
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    а в $errno, $errstr нет ничего?
     
  4. slbond86

    slbond86 Новичок

    С нами с:
    6 апр 2014
    Сообщения:
    2
    Симпатии:
    0
    Да это адрес сервера точнее контролера arduino, и соединение проходит без ошибок.
    Даже отправляется первая строка заголовка(контроллер её получает) - POST /post/test.php HTTP/1.1\r\n

    Я попробовал собрать сначала все сообщение а потом за одну отправку отправить. И тогда контроллер все принял правильно. Но вопрос почему с локального компьютера Windows7(Apache24+PHP55) работала отправка в несколько приемов а на FreeBSD(Apache24+PHP55) нет
     
  5. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Код (PHP):
    1. ini_set('display_errors',1);
    2. error_reporting(E_ALL); 
    ну и напомню: fwrite() returns the number of bytes written, or FALSE on error.

    А также то, что лучше подготовить "посылку" и 1 раз заслать.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В посте есть символы &, не являющиеся разделителями аргументов?