За последние 24 часа нас посетили 55284 программиста и 1635 роботов. Сейчас ищут 1129 программистов ...

То, чего мы не знаем о PHP, но знать полезно и нужно!

Тема в разделе "Прочие вопросы по PHP", создана пользователем Psih, 16 июл 2008.

  1. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Горбунов Олег - есть еще более яркий пример. register_globals. Пожалуйста, придумана для упрощения жизни. Ан, нет, пришлось вводить _искусственные проблемы_ в виде register_globals = Off.
     
  2. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    MiksIr, смотри. Были magic quotes. Нам приходилось их отлавливать и исправлять положение дел в самом скрипте. Был register globals, который так же нам мешал. Теперь нам ещё нужно и заголовки контролировать. Это излишняя забота разработчиков, которая в итоге и приводит к проблемам. Почему бы не сделать эту возможность опциональной? Как часто ваши скрипты падают с неисправимыми ошибками? Разве что time limit или memory limit превышены.

    Вобще мне и самому нравится такое поведение. Меня в тупик поставил только eval, который не влияет на ход работы основного скрипта, но влияет на его ответ.
     
  3. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Sergey89 register globals мешал плоходумающим людям писать без потенциальных ошибок безопасности. А казалось бы, инициализируй все переменные перед тем, как ты их использовать хочешь, и никаких проблем.
    Вы инициализируете переменные? Или считаете, что это лишняя забота разработчиков? Вот установка статуса - это та же инициализация общения программы на PHP с вызывающим окружением.

    И вообще у меня никогда такой проблемы не вставало по двум причинам. 1 - я не использую eval, это это моветон ;) 2 - я всегда отлавливаю ошибки (как PHP, так и эксепшены) в едином месте, где решаю что выдать и сам устанавливаю 500. И с контент-типом тоже самое - при наличии разных типов view мне гораздо сложнее его не выдать, чем выдать. 3 - я сам мало что пишу, а ведущему мне удалось привить желание све делать красиво.

    Для остальных горе писателей принудительное 500 очень кстати... и у них, думается, скрипты падают чаще. Что до конкертно eval-а - тут соглашусть, что момент спорный.
     
  4. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    PS: хотя, несомненно, для echo('Hello world') это нововведение пройдет незамеченным ;)))
     
  5. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Можно рассматривать это так
    Код (Text):
    1.  
    2. $sapi_status = isset($user_defined_status) ? $user_defined_status : 200;
    =)
     
  6. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    cgi.nph = 0
    Вот те ;)
     
  7. Anonymous

    Anonymous Guest

    хыхы. MiksIr, да по большому счету, я тоже с тобой согласен. Бесит попытка несколько проблем подвести под одно оправдание. Пусть бы он всегда тогда в 500 падал. Документированно. Но не при display_errors = off только.
     
  8. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Горбунов Олег, вообще тут есть свой резон. Типа, если отображение ошибок выключено - значит продакшн, значит нужно кодами отрабатывать. А если отображение ошибок включено, то разработка... и если выдать 500 - начнется куча проблем у народа... особо когда они юзают IE с "friendly" ошибками.
    В общем, много таких заморочек в PHP. Хы... может в 6-ке будет все гладко и шелковисто ;)
     
  9. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Только даже этот 500 статус зависит от многих факторов.

    Код (Text):
    1. display_errors = Off
    2. output_buffering = Off
    PHP:
    1. <?php
    2. // 500
    3. print 'hello';
    4. some_undefined_function();
    5.  
    6. // 500
    7. print str_repeat('hello', 1000);
    8. some_undefined_function();
    9.  
    10. // 200
    11. print 'hello';
    12. some_undefined_function();
    13.  
    14. // 200
    15. print str_repeat('hello', 1000);
    16. some_undefined_function();
    Даже понятно, почему именно такое поведение. Но это как-то нелогично, чтоли :roll: