3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
1

Можно ли выполнить условие $var===false, если переменная $var другого типа (не boolean)?

10.10.2018, 09:13. Показов 925. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сокет-сервер, использующий скрипт на PHP под Linux, разрывает соединение со стороны сервера, если для данных $input, полученных с клиента, выполняется условие $input===false Если соединение с клиента происходит через модем, при закрытии соединения на клиенте с помощью команды AT^SISC=0 сервер получает данные, равные значению false в PHP, и закрывает соединение со стороны сервера. Если соединение происходит с помощью клиента на C#, при закрытии соединения клиентом сервер не получает значения false, не закрывает соединение, если оно закрывается по условию $input===false, и пытается читать пустые строки с клиента. Для пустой строки $input это условие не выполняется. Соединение можно закрывать по другому условию, например, при получении другой определенной строки.
Вопрос не о сетях, а о том, можно ли, чтобы не менять условие закрытия соединения на сервере, отправив определенные байты с клиента, получить на сервере значение, соответствующее условию $input===false? В чем отличие значения false на PHP от пустой строки, и можно ли получить true, сравнивая false с данными другого типа, например, строкой или байтом, с помощью оператора === Он проверяет тождество типов, но каким-то образом при получении данных с клиента, который использует модем, условие сравнения выполняется. Клиент на C# отправляет данные в виде массива байт.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2018, 09:13
Ответы с готовыми решениями:

Как сцепить строки? Например <? $var='Ура!'; $var=$var+' Еще раз...'; echo $var; ?>
Вот пример: &lt;? $var='Ура!'; $var=$var+' Еще раз...'; echo $var; ?&gt; Выводит Ура!0

Скрипты перестали различать $_POST['var'], $_SESSION['var'] и просто $var
После переезда на новый хостинг с php 5.2 на php 5.3 обнаружил глюк. Почему то скрипты перестали...

Что значит в списке переменных, то есть var, выражение типа <переменная>: 0.1; ?
Что значит в списке переменных, то есть var, выражение типа &lt;переменная&gt;: 0..1; Например (d: 0..1)...

Как можно обратиться к var из другого метода?
Подскажите как можно обратиться к var из другого метода

7
Эксперт .NET
12505 / 8689 / 1310
Регистрация: 21.01.2016
Сообщений: 32,649
10.10.2018, 09:16 2
Max_t, вы код людям покажите. А это всё - надписи на заборе.
0
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
10.10.2018, 10:44 3
Мало что понял из текста, но.
=== - это строгое сравнение. $input должен быть типом bool, иначе всегда будет false.
== - не строгое сравнение. Пустая строка, ноль приравняются к false, иначе будет true.
0
Эксперт .NET
12505 / 8689 / 1310
Регистрация: 21.01.2016
Сообщений: 32,649
10.10.2018, 11:11 4
У ТС-а некий сервер на сокетах, который как-то через задницу написан и работает соответсвенно. Сначала он упорно грешил на клиента написанного на C#, но потом сам убедился, что сервер гонит даже, когда нет подключений.

Но код сервера он упорно показывать не хочет. Всё ждёт, что ему подскажут, что всё можно решить через волшебное свойство sdelatZashibis = true и ничего переписывать не придётся.
3
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
11.10.2018, 00:40  [ТС] 5
Значение false на сервере возвращает функция PHP socket_read, когда модем на клиенте закрывает соединение. По этому условию закрывается соединение на сервере. Сначала неправильно понял, что отправляются данные с клиента, которые сервер воспринимает как значение false типа boolean. Не думаю, что такое возможно. При закрытии соединения через сетевую карту клиентом на C# функция socket_read не возвращает значение false и продолжает пытаться читать пустые строки с клиента, так как сервер не закрывает соединение по условию:
if($input === false) socket_shutdown($client);
Вопрос в том, как корректно отслеживать закрытие соединения с клиента на C#. Буду разбираться или задам вопрос в другом разделе. Usaga, Ваши фантазии, как у меня написан сервер, лучше оставьте при себе. Проблема в связке конкретной функции PHP на сервере и клиента на C#.
0
Эксперт .NET
12505 / 8689 / 1310
Регистрация: 21.01.2016
Сообщений: 32,649
11.10.2018, 04:34 6
Цитата Сообщение от Max_t Посмотреть сообщение
Вопрос в том, как корректно отслеживать закрытие соединения с клиента на C#.
Кто клиент - роли не играет от слова совсем. Сетевой стёк у всех один.

Цитата Сообщение от Max_t Посмотреть сообщение
Проблема в связке конкретной функции PHP на сервере и клиента на C#.
Нет. Проблема в говнокоде на сервере. Корректный код будет корректно отрабатывать любые ситуации, включая внештатные. А ваш не может нормально отработать даже совершенно нормальную ситуацию - закрытие соединения.

Цитата Сообщение от Max_t Посмотреть сообщение
Usaga, Ваши фантазии, как у меня написан сервер, лучше оставьте при себе.
Мои "фантазии" верны, ибо ваш сервер работает некорректно.

Пока вы не покажете код сервера и не преслушаетесь к рекомендациям по его исправлению (а не минусы раздавать советующим), у вас ничего не изменится. Без этого, ваше описание проблемы - слова на заборе и не более.
0
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
11.10.2018, 08:30  [ТС] 7
Нашел информацию, что вместо:
if($input === false) socket_shutdown($client);
рекомендуют выполнять проверку:
if(($input === false) || ($input === '')) socket_shutdown($client);
Сообщается, что вызов функции $input = socket_read($client, $length); при закрытии соединения на клиенте может возвращать как false, так и пустую строку. Пока соединение на клиенте открыто, в логах сервера не нашел пустых строк, полученных с клиента. Поэтому соединение чаще, чем надо, закрываться на сервере не должно. Сделаю проверку на false и пустую строку и протестирую.
Usaga, на сервере некорректно работал вызов одной функции. И да, ее работа зависит от клиента. Думаю, что разобрался в этом вопросе. Если не разобрался, уточню. Предполагаю, что Вам научиться нормальному общению на форуме будет сложнее.
0
Эксперт .NET
12505 / 8689 / 1310
Регистрация: 21.01.2016
Сообщений: 32,649
11.10.2018, 09:25 8
Цитата Сообщение от Max_t Посмотреть сообщение
И да, ее работа зависит от клиента.
Нет, не зависит. Никак. Взаимодействие сервера и клиента идёт через сетевой стёк и протокол TCP. Никаких особенностей технологии сервера или клиента через этот протокол не просачивается.

Цитата Сообщение от Max_t Посмотреть сообщение
Предполагаю, что Вам научиться нормальному общению на форуме будет сложнее.
Я хорошо и вежливо общаюсь. Просто некоторые собеседники имеют свойство к невосприятию советов и нежелание выкладывать код. Если бы вы СРАЗУ выложили код клиента и сервера, то сразу бы получили комментарии и рекомендации по исправлению.

А так пришлось вам несколько раз одно и тоже объяснять, плюс код сервера мы так и не увидели.
0
11.10.2018, 09:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2018, 09:25
Помогаю со студенческими работами здесь

/var/lock и /var/run, как будто нет таких директорий
Доброго времени суток! Система CentOS 5.3. На системе настроен nat на POSTROUTING некоторых ip...

Почему Мандрива не захотела копировать диск в /var/ftp и /var?
На пробу я сделал два раздела /var /var/ftp Оба побольше 5 гектаров, но мандрива не стала...

[?] Вопрос по адресации. В каком случае [var] =var=
Есть код .data t dw 10 .code main: mov ax, ; или t ..

True, если не меняется, False, если меняется boolean переменная (Unity)
Как сделать код C# в Unity, чтоб boolean переменная имела значение False, если переменная...

Global $var или $GLOBALS['var']
Здравствуйте! Такие вот два примера: function assoc($sql, $array = ) { global $pdo; ...

В чем разница между $var и $$var?
Обясните плиз новичку разницу между $var и $$var Thanx!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru