LINUX.ORG.RU

Ошибки PHP в debian


0

1

Здравствуйте, я сделал сайт на php, делал под денвером, все было нормально. Вчера установил debian, после чего на сайте появлились ошибки, которых не было под денвером. Скажите, в чем может быть проблема?

Ну или в Венде, на крайний случай.

urxvt ★★★★★
()
Ответ на: комментарий от kermzyxer

если мне неизменяет память то в денвере нотисы как раз и непоказываются

visual ★★★
()
Ответ на: комментарий от gconfer

Notice: Array to string conversion in /var/www/localhost/htdocs/header.php on line 18

Перевожу:

быдлокод детектед! быдлокодер конвертирует массив в строку.

И так почти на всех страницах в разных местах.

в конфиге php.ini поправьте error_reporting - и всё будет по прежнему.

drBatty ★★
()

Array to string conversion

И оно верно работало? Дэнвер умеет правильно конвертировать массивы в строки? :)
Хотя, что будет «правильно»..? Дай строчку кода посмотреть.

SOmni ★★
()
Ответ на: комментарий от gconfer

Это не ошибки. Это заметки. Не нравится - отключи:

php_value error_reporing E_ALL & ~E_NOTICE

Или отключи отображение на сайте:

php_value display_errors off
Frakhtan-teh ★★
()
Ответ на: комментарий от SOmni

И оно верно работало? Дэнвер умеет правильно конвертировать массивы в строки?

про деневер не знаю мой так делает

#!/usr/bin/php
<?php

$a = array('key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3');

print_r($a);

$s = $a;

echo "\nstring: '$s'\n";

?>
$ ./test1.php 
Array
(
    [key1] => val1
    [key2] => val2
    [key3] => val3
)

string: 'Array'
$ php --version
PHP 5.3.8 (cli) (built: Aug 25 2011 04:04:35) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

такая вот «конвертация» :-)

drBatty ★★
()
Ответ на: комментарий от kermzyxer

Я не пишу на php.

заметно. Быдлоязык - там ошибки - не ошибки. Можно что угодно во что угодно конвертировать, и это работает, даже если и не имеет никакого смысла (как здесь).

Там даже jit нет? Если есть, то уже компилятор.

понятия не имею.

drBatty ★★
()

Что нужно сделать: прочитать, что же всё таки за «ошибки» пишутся, понять почему и исправить. Пример, который привели вы — предупреждение, что вы пытаетесь преобразовать массив в строку. Возможно, в вашем случае это и нормально, но в большинстве — что-то непонятное. Например, если вы захотите преобразовать двумерный массив в строку.

Если, на ваш взгляд, всё должно быть нормально — используйте explode, чтобы склеить массив и присвоить результат скаляру. Далее — используйте скаляр и интерпретатор php не будет иметь к вам никаких вопросов.

helios ★★★★★
()

Все нормально

Спасибо, я разобрался. Оказывается на денвере был php 5.3, а в debian 5.4. Я исправил код, теперь все нормально.

gconfer
() автор топика

php.ini

display_errors = 0

А вообще, у тебя там куча нотайсов, о том, что переменные не объявлены и т.п. Надо было разрабатывать сайт с включенным отображением ошибок, и error_reporting = E_ALL.

P.S. Тред не читал.

VirRaa ★★★
()
Ответ на: комментарий от helios

Пример, который привели вы — предупреждение, что вы пытаетесь преобразовать массив в строку. Возможно, в вашем случае это и нормально

ЩИТО?

Как может быть ЭТО - нормально?

Если, на ваш взгляд, всё должно быть нормально — используйте explode

хм... деневер меняет array --> explode(' '

так?

drBatty ★★
()

ЕМНИП, в PHP 5.4 отказались от автоматической конвертации массива в строку. Так что, когда будешь писать код, ориентируйся на это поведение и конвертируй явно. Если, конечно, не хочешь в будущем переписывать кучу быдлокода.

karbofos
()
Ответ на: комментарий от drBatty

Ну, я про то, что не критично. PHP просто выведет «Array» вместо echo $array. В вёрстке вообще критичного мало...

Denwer ничего не меняет, просто «не шумит».

helios ★★★★★
()
Ответ на: комментарий от drBatty

Да ладно типизация, тут такие ахтунги иногда случаются:

$ php5
<?php
    $a = array(1);
    $b = &$a[0];
    $c = $a;
    $c[0]++;
    print "{$a[0]}";
?>
2

$ php5
<?php
    $a = array(1);
    //$b =& $a[0];
    $c = $a;
    $c[0]++;
    print "{$a[0]}";
?>
1

Тестил на 5.3

helios ★★★★★
()
Ответ на: комментарий от drBatty

Ты так говоришь, как будто я защищаю php - ни разу не так. Даже желания нет. Однако, бросить фекалиями в другие не прочь. Проблема «быдлоязыков» - быдлопрограммеры, которые приходят в него вместе с популярностью языка.

helios ★★★★★
()
Ответ на: комментарий от helios

Проблема «быдлоязыков» - быдлопрограммеры, которые приходят в него вместе с популярностью языка.

+100500

Однако согласись - нормальный ЯП так не поощряет быдлокодерство, как PHP.

drBatty ★★
()
Ответ на: комментарий от drBatty

Безусловно, каждый, кто хоть сколько-то способен программировать, может что-то на нём написать. Что рождает отнюдь не самый хороший код.

Эта псевдопростота развращает человека: запустил, работает - зашибись! Идём дальше.

У же не про php: то, что программа скомпилировалась - ещё не значит, что она правильно работает.

helios ★★★★★
()
Ответ на: комментарий от helios

Эта псевдопростота развращает человека: запустил, работает - зашибись! Идём дальше.

угу. Вот только я что-то не вижу больше ничего хорошего. С сишным синтаксисом.

drBatty ★★
()
Ответ на: комментарий от drBatty

Можно что угодно во что угодно конвертировать, и это работает, даже если и не имеет никакого смысла (как здесь).

А мы не знаем, «как здесь», ТС код не показал. Я, например, в питоне часто пользуюсь тем, что он умеет списки в строки раскладывать - чтобы рассматривать в логах всякие подозрительные данные.

SOmni ★★
()

1) Это не ошибки PHP, а твои 2) Это вообще не ошибки

Проблема может быть в голове.

vkaravanov
()
Ответ на: комментарий от SOmni

А мы не знаем, «как здесь», ТС код не показал. Я, например, в питоне часто пользуюсь тем, что он умеет списки в строки раскладывать - чтобы рассматривать в логах всякие подозрительные данные.

а я вот не понимаю, как можно массив превратить в скаляр.

drBatty ★★
()
Ответ на: комментарий от helios

А я вот как-то попытался разобраться в популярности php у разных типов людей, вовлечённых в разработку. тут

любопытно... В итоге, для Ъ, php для всех хорош. Даже тем, что он кривой :)

drBatty ★★
()
Ответ на: комментарий от trashymichael

дело в том, что

1. в пхп в массиве может быть что угодно, и проиндексирован массив может быть не только 0, 1, 2, а любыми строчками. Как такое ляжет в строку - понять невозможно (ну да, надо на 100500 строчек назад посмотреть, и потом все эти 100500 строчек проверить.)

2. в пхп могут быть дырявые массивы - [0], [1], [2], ВНЕЗАПНО [14], ЕЩЁ БОЛЕЕ ВНЕЗАПНО [-1]

3. никто ничего не объявляет, и массив может в любой момент изменить свою структуру. Т.е. если у нас есть такой код

$a = array(1,2,3,4,5);
f($a);
echo $a

то что-бы его понять, нужно ПОЛНОСТЬЮ изучить, что делает f() с нашим массивом.

Это у вас в пайтоне 100500 нужных и годных структур. А у нас, в php - только одна. Массив. За то любой массив можно как угодно использовать. Чем мы и занимаемся...

drBatty ★★
()
Ответ на: комментарий от drBatty
$a = array(1,2,3,4,5);
f($a);
echo $a

то что-бы его понять, нужно ПОЛНОСТЬЮ изучить, что делает f() с нашим массивом.

это утверждение верно для любых действий после f($a).
Есть такие случаи, когда неважно, как оно там индексируется, и просто нужно вывести все элементы через запятую, не городить же для этого циклы-функции-etc...

SOmni ★★
()
Ответ на: комментарий от SOmni

Есть такие случаи, когда неважно, как оно там индексируется, и просто нужно вывести все элементы через запятую, не городить же для этого циклы-функции-etc...

дык для этого есть implode(). Вот первый пример из доки:

<?php

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

echo $comma_separated; // lastname,email,phone

// Empty string when using an empty array:
var_dump(implode('hello', array())); // string(0) ""

?>
Тут явно видно, чего добивается кодер - просто вывести через запятую. Ну а если там будет что-то не то, то хоть нотис будет. Куда как проще отлаживать. С отладкой в php очень плохо - никто ничего не контролирует, и найти ошибку тяжело. Как в С с указателями и утечками памяти.

drBatty ★★
()
Ответ на: комментарий от drBatty

С отладкой в php очень плохо - никто ничего не контролирует, и найти ошибку тяжело.

Ещё и сообщения об ошибках не всегда очевидны. Например, написал ты вместо «foreach» «for». php выводит ошибку «не найдена точка с запятой». Ты ищешь: где? А просто в синтаксисе for есть точки с запятыми, а в foreach - нет.

helios ★★★★★
()
Ответ на: комментарий от helios

А я вот как-то попытался разобраться в популярности php у разных типов людей, вовлечённых в разработку. тут

Если в друг понадобится логика

И ты ещё рассуждаешь о ЯП? Ты русский выучи сначала, писец хренов.

VirRaa ★★★
()
Ответ на: комментарий от VirRaa

Спасибо за найденную опечатку. Однако, Ваша резкость мне не понятна. Может стоит обратиться к врачу? Сложно, наверное, жить с такой ненавистью внутри...

helios ★★★★★
()
Ответ на: комментарий от helios

Спасибо за найденную опечатку. Однако, Ваша резкость мне не понятна. Может стоит обратиться к врачу? Сложно, наверное, жить с такой ненавистью внутри...

Вау. Даже стыдно стало, честно. Прошу прощения за резкость, просто обидно за пых стало =). В статье, как я считаю, есть не корректные аргументы.

VirRaa ★★★
()
Ответ на: комментарий от VirRaa

Ничего, бывает :) Вполне возможно, что истину я несколько исказил: сам был под впечатлением от

$array = array('one', 'two');
var_dump(in_array(0, $array)); // true
var_dump(in_array(0, $array, $strict = true)); // false

helios ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.