Я запускаю код, получающий данные с сервера БД, все работает локально. Но когда я нажимаю на него онлайн, он больше не работает.
Я думаю, я знаю, откуда проблема. Вот данные, которые я получаю локально:
object(stdClass)#451 (14) {
["matter_created_actionstep_c"]=>
string(1) "1"["trust_receipt_sent_c"]=>
string(1) "1"["scope_complete_c"]=>
string(1) "0"["transferred_trust_to_current_c"]=>
string(1) "0"}
И когда я нажимаю на свой сервер, вот результат, который я получаю:
object(stdClass)#451 (14) {
["matter_created_actionstep_c"]=>
int(1)
["trust_receipt_sent_c"]=>
int(1)
["scope_complete_c"]=>
int(0)
["transferred_trust_to_current_c"]=>
int(0)
}
Вам известна какая-либо конфигурация apache, которая может привести к этому изменению набора?
Единственный файл проекта, который отличается, это файл conf:
локально:
DB_HOST=1.1.1.1
на сервере:
DB_HOST=localhost
Заранее спасибо.
Это может быть результатом многих проблем. Может быть, другая версия PHP, может быть, данные поступают из базы данных, а версия драйвера базы данных отличается …
Я бы сказал, что приложение виновато. PHP нетипизирован, то есть в большинстве случаев никому не нужен фактический тип переменной. В вашем случае почти никто не заботится, если значение 2
или же "2"
до тех пор, пока он ведет себя одинаково (например, 2==2
равняется 2=="2"
). Если приложение требует определенных типов в некоторых переменных, оно должно гарантировать, что переменные содержат эти типы! Это не тот случай, здесь.
Проверьте приложение и часть кода, которая записывает значение в объект. Эта часть кода должна привести значение к нужному типу, прежде чем поместить его в переменную.
Тем не менее (или если объект происходит откуда-то еще), возможно, имеет смысл сделать код более прощающим в отношении типов, то есть не полагаться на специальный тип, если это не нужно. По моему опыту, есть только несколько случаев, когда тип переменных действительно имеет значение.
Других решений пока нет …