Обработчик ошибок позволяет вам приспосабливать то, в каком виде ваш код будет возвращать ошибки.

Приятная страница ошибок с кучей отладочной информации будет с вами на протяжении всего длительного пути разработки. И первый пакет для нашего приложения об этом позаботится.

Мне нравится  filp/whoops, поэтому я покажу как вам его поставить на свой проект. Если вы предпочитаете другой, спокойно ставьте свой. В том и прелесть программинга без фреймворка - у вас есть тотальный контроль над собственным проектом.

Альтернативой мог бы послужить PHP-Error.

Composer - это менеджер зависимостей для PHP.

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

Если вы еще не поставили Composer, перейдите по ссылке на сайт и сделайте это. Пакеты Composer для своего проекта вы найдете на Packagist.

Фронт-контроллер - это единая точка входа для вашего приложения.

Для начала создайте пустую папку под свой проект. Вам также понадобится точка входа, куда будут направляться все запросы. Это означает, что вам следует создать файл index.php

Распространенный способ для этого - помещать index.php в корневую папку каждого проекта. Таким же образом поступают некоторые фреймворки. Позвольте мне объяснить, почему вам так делать не стоит.

Если вы новичок, данное руководство не для вас. Оно нацелено на людей, которые знают основы PHP и объектно-ориентированного программирования.

Также вам должно быть известно понятие SOLID. Если вы с ним не знакомы, сейчас самое подходящее время ознакомиться с его принципами, прежде чем вы приступите к данному руководству.

Для этого применяется стандартная функция trim(). Однако есть разновидность "сложных" пробелов, которые возникают при UTF-кодировке:


// превратим HTML с неразрывными пробелами в "обычную" строку
$myHTML = " abc"; 
$converted = strtr($myHTML, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));

// нижеследующая инструкция не работает, как ожидается 
// $converted превратится в " abc" в исходном коде
$converted = trim($converted); 

//   превращается в 0xA0 в обычном случае, тогда можно попробовать: 
$converted = trim($converted, "\xA0"); // <- что не всегда срабатывает 

// UTF кодирует его в chr(0xC2).chr(0xA0) 
$converted = trim($converted,chr(0xC2).chr(0xA0)); // у меня работает 

Нашел полезный PHP-скрипт для обнаружения потенциально вредоносных скриптов, также написанных на PHP. Суть работы сводится к поиску вхождений base64_decode, HTTP_REFERER, файлов, названия которых начинаются с точки (так они скрываются от FTP-менеджеров). Можно взять здесь https://aw-snap.info/articles/base64-decode.php либо вот ниже:

<html><head><title>Find String</title></head><body>
<?php
// ini_set('max_execution_time', '0');
// ini_set('set_time_limit', '0');
find_files('.');
function find_files($seed) {
  if(! is_dir($seed)) return false;
  $files = array();
  $dirs = array($seed);
  while(NULL !== ($dir = array_pop($dirs)))
    {
      if($dh = opendir($dir))
        {
          while( false !== ($file = readdir($dh)))
            {
              if($file == '.' || $file == '..') continue;
              $path = $dir . '/' . $file;
              if(is_dir($path)) { $dirs[] = $path; }
              else { if(preg_match('/^.*\.(php[\d]?|txt|js|htaccess)$/i', $path)) { check_files($path); }}
            }
          closedir($dh);
        }
    }
}

function check_files($this_file){
  $str_to_find[]='base64_decode';
  $str_to_find[]='edoced_46esab'; // base64_decode reversed
  $str_to_find[]='preg_replace';
  $str_to_find[]='HTTP_REFERER';
  $str_to_find[]='HTTP_USER_AGENT';

  if(!($content = file_get_contents($this_file)))
    { echo("<p>Could not check $this_file You should check the contents manually!</p>\n"); }
    else
      {
        while(list(,$value)=each($str_to_find))
          {
            if (stripos($content, $value) !== false)
              {
                echo("<p>$this_file -> contains $value</p>\n");
              }
            }
          }
        unset($content);
}
?>
</body></html>

Сделал заказчику поисковик по недвижке на IPS4 и Pages. Одной из последних задач была необходимость сконвертировать select-элементы с множественным выбором в набор checkbox'ов. С этой задачей отменно справился легковесный jQuery-плагин Multicheckbox.

На планшетах и телефонах может съезжать затемнение (overlay) в галерее prettyPhoto, а картинка центрироваться не по ширине экрана. Я предполагаю, что это связано с масштабированием сайта на мобильных устройствах и некорректным расчетом ширины области просмотра (viewport).

Это не всестороннее решение проблемы, а быстрое - чтоб вот прям вот уже сейчас, чтоб не вылезало красным предупреждение и разрешенная длина поля была хотя бы 255:

идем в modules/system/system.module, находим что-то типа:

$types['textfield'] = array(
    '#input' => TRUE,
    '#size' => 60,
    '#maxlength' => 128,

и меняем на:

$types['textfield'] = array(
    '#input' => TRUE,
    '#size' => 60,
    '#maxlength' => 255,
Наверх