Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Max_t
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 86
1

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

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

Сокет-сервер, использующий скрипт на PHP под Linux, разрывает соединение со стороны сервера, если для данных $input, полученных с клиента, выполняется условие $input===false Если соединение с клиента происходит через модем, при закрытии соединения на клиенте с помощью команды AT^SISC=0 сервер получает данные, равные значению false в PHP, и закрывает соединение со стороны сервера. Если соединение происходит с помощью клиента на C#, при закрытии соединения клиентом сервер не получает значения false, не закрывает соединение, если оно закрывается по условию $input===false, и пытается читать пустые строки с клиента. Для пустой строки $input это условие не выполняется. Соединение можно закрывать по другому условию, например, при получении другой определенной строки.
Вопрос не о сетях, а о том, можно ли, чтобы не менять условие закрытия соединения на сервере, отправив определенные байты с клиента, получить на сервере значение, соответствующее условию $input===false? В чем отличие значения false на PHP от пустой строки, и можно ли получить true, сравнивая false с данными другого типа, например, строкой или байтом, с помощью оператора === Он проверяет тождество типов, но каким-то образом при получении данных с клиента, который использует модем, условие сравнения выполняется. Клиент на C# отправляет данные в виде массива байт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
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 и $$var?
Обясните плиз новичку разницу между $var и $$var Thanx!

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

_GET['var'] - Ошибка "Notice: Undefined index: var"
Я создал один файл 01.php (я пользуюсь PHP Expert Editor 3.3) и написал в нем следующий код: ...

7
Usaga
Эксперт .NET
5040 / 3370 / 602
Регистрация: 21.01.2016
Сообщений: 13,254
Завершенные тесты: 2
10.10.2018, 09:16 2
Max_t, вы код людям покажите. А это всё - надписи на заборе.
0
Зверушь
421 / 335 / 87
Регистрация: 01.05.2010
Сообщений: 1,644
10.10.2018, 10:44 3
Мало что понял из текста, но.
=== - это строгое сравнение. $input должен быть типом bool, иначе всегда будет false.
== - не строгое сравнение. Пустая строка, ноль приравняются к false, иначе будет true.
0
Usaga
Эксперт .NET
5040 / 3370 / 602
Регистрация: 21.01.2016
Сообщений: 13,254
Завершенные тесты: 2
10.10.2018, 11:11 4
У ТС-а некий сервер на сокетах, который как-то через задницу написан и работает соответсвенно. Сначала он упорно грешил на клиента написанного на C#, но потом сам убедился, что сервер гонит даже, когда нет подключений.

Но код сервера он упорно показывать не хочет. Всё ждёт, что ему подскажут, что всё можно решить через волшебное свойство sdelatZashibis = true и ничего переписывать не придётся.
3
Max_t
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 86
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
Usaga
Эксперт .NET
5040 / 3370 / 602
Регистрация: 21.01.2016
Сообщений: 13,254
Завершенные тесты: 2
11.10.2018, 04:34 6
Цитата Сообщение от Max_t Посмотреть сообщение
Вопрос в том, как корректно отслеживать закрытие соединения с клиента на C#.
Кто клиент - роли не играет от слова совсем. Сетевой стёк у всех один.

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

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

Пока вы не покажете код сервера и не преслушаетесь к рекомендациям по его исправлению (а не минусы раздавать советующим), у вас ничего не изменится. Без этого, ваше описание проблемы - слова на заборе и не более.
0
Max_t
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 86
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
Usaga
Эксперт .NET
5040 / 3370 / 602
Регистрация: 21.01.2016
Сообщений: 13,254
Завершенные тесты: 2
11.10.2018, 09:25 8
Цитата Сообщение от Max_t Посмотреть сообщение
И да, ее работа зависит от клиента.
Нет, не зависит. Никак. Взаимодействие сервера и клиента идёт через сетевой стёк и протокол TCP. Никаких особенностей технологии сервера или клиента через этот протокол не просачивается.

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

А так пришлось вам несколько раз одно и тоже объяснять, плюс код сервера мы так и не увидели.
0
11.10.2018, 09:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2018, 09:25

Пишу: $var='tmp'; $$var='Привет'; print $tmp; Вижу: Привет
Пишу: $var='tmp'; $$var='Привет'; print $tmp; Вижу: Привет Это глюк, или это предусмотренно?

self, static, var, public
Не понимаю ничего в этих приставках... Зачем делать static-переменные? Чем отличается var от...

Что даёт '{$var}' `name`
Видел всякие уроки, и там было написано так: mysql_query(&quot;SELECT `title` WHERE `id`='{$id}'&quot;); ведь...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru