Tag Archives: PHP

Борьба с автоматическим добавлением слешей в PHP

В PHP по умолчанию, автоматически добавляются слеши для экранирования символов кавычек. Как результат, может нарушиться логика работы программ, а значит, перестать работать сайты.
Для того, чтоб Ваши программы на Корпорации 2 работали предсказуемо, нужно в .htaccess прописать:
php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0

Полезная статья по экранированию кавычек: http://www.shram.kiev.ua/hacker/php/kavichki.shtml

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Исправление ошибки вывода изображений в интернет-магазине на движке Shop Script 5

Автор: Рудюк С . А.
https://corp2.net

E-Mail: rs@corp2.net

С некоторых пор пришлось пользоваться чужими движками сайтов и интернет-магазинов. Закачал последнюю версию движка интернет-магазина Shop Script 5. Движек понравился, но сразу столкнулся с проблемой вывода изображений. После закачки изображения, в интернет-магазине вместо картинки товара выводилась надпись.
Начал изучать проблему, оказывается тег img заполняется правильно. Текст, который выводится — это текст из alt. Но, вот путь к изображению не совпадает с действительностью. Так, например, выводится 200.jpg, а в реальности сохранен файл, как 200×0.jpg. 750.jpg, а в реальности — 750×0.jpg.
Начал копаться в движке, искать по форумам и нашел решение, как исправить данную проблему.

В файле list-thumbs.html есть такая команда (или нечто подобное):

Её нужно поменять на:

Далее, ищем по тексту подобные команды с вложением размера 750.

В некоторых шаблонах, применяютя другие размеры изображений, поэтому, нужно так же указать генерацию необходимых размеров изображений. Это делается, если войти в Shop-Setting-Product images. Необходимо указать размеры, которые показаны на скриншоте к данному разделу.

Завантаження великих файлів в систему Mantis Bug Tracker

Автор: Рудюк С . А.
https://corp2.net

E-Mail: rs@corp2.net

Останнім часом, коли показують мені помилку, я часто використовую запис відео з екрану процесу, що призводить до помилки. Це значно економить час а також дозволяє проаналізувати якісь моменти, що зразу міг не побачити. Але даже декілька хвилин відео може займати більше 5 Мб, що по замовчуванню виділяються в конфіг-файлі MantisBT, а також можуть перевищувати ліміти, що встановлені в PHP. В таких випадках при пересилці файлу буде видана помилка.

Знімимо ці ліміти.

1. Підвіщуємо ліміти в MantisBT.
Редагуємо файл config_inc.php.

Тут ми переключили режим запису на диск — щоб не завантажувати великі файли в базу даних і навантажувати цим сервер MySQL. Якщо Вы хочете зберігати файли в базі даних, тоді вкажіть режим Database, а також збільшіть ліміти в самому MySQL. Але це я вважаю, що не доцільно…

Увага! Зверніть уваагу, що при переключеннях режимів на інший, раніше завантажені файли, наприклад в базу даних, будуть не доступні.

2. Підвищуємо ліміти в PHP.
Редагуємо файл : /etc/php5/apache2/php.ini

Ліміт встановлює 500 Мегабайт. Ви можете вказати інший ліміт.

3. В мене використовується 2 рівнева архітектура веб-серверу Nginx-Apache2. Тому, необхідно зробити зміни в сервері Nginx.
Редагуємо файл /etc/nginx/nginx.conf:

Автор: Рудюк С . А. https://corp2.net

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Налаштування системи Mantis Bug Tracker

Автор: Рудюк С . А.
https://corp2.net

E-Mail: rs@corp2.net

Безкоштовна веб-орієнтована система MantisBT дозволяє вести облік помилок, контролювати їх виконання а також розраховувати час, що витрачається. Звичайно, щоб дана система працювала так, як потрібно, необхідно налаштувати «під себе» конфігураційний файл.

Сайт виробника системи: http://www.mantisbt.org

Встановлюється дана система без проблем — так, як інші веб-системи. Тому, я не буду описувати, як це робиться.
По замовчуванню, ця система — на англійській мові. Але всі файли з перекладом на багато інших мов встановлюються зразу з системою. Просто, необхідно налаштувати файл.

Редагуємо в корні сайту з даною системою файл config_inc.php. Це файл призначений для налаштувань користувача. Якщо Вам потрібно буде подивитись інші змінні та їх призначення — дивіться файл config_defaults_inc.php.

Ітак, зміст мого файлу config_inc.php:

В цьому файлі я налаштував український інтерфейс баг-репорту, український формат дати а також більш розширену роботу, ніж вона є по замовчуванню.

Ось результат наших налаштувань:

mantis1 mantis2mantis3

 

Автор: Рудюк С . А. https://corp2.net

 

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Система обробки помилок MantisBT та пароль адміністратора

Автор: Рудюк С . А.
https://corp2.net

E-Mail: rs@corp2.net

Встановив систему обробки помилок MantisBT. Це безкоштовна веб-орієнтована система. Дуже зручна в роботі.
Встановив. Система не запитала в мене пароль для адміністратора. Пробую ввійти — не входить.
Як виявилось, пароль та ім’я для першого входу в систему:
Логін: administrator
Пароль: root

Автор: Рудюк С . А. https://corp2.net

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

PHP-Barcode — генерация штрих кода

Для тех кто по каким-либо причинам стал изучать проблемы генерации штрих кода (barcode) средствами PHP, презентую open source библиотеку для реализации нескольких популярный стандартов кодирования.

Вообще библиотека существует не только в формате, php скрипта, а еще и в unix & windows source вариантах, которые способны работать с большим количеством штрих кодов, но, напомню, в большинстве случаев используется EAN-13.
Перечислю поддерживаемые стандарты:

EAN-8, EAN-12, EAN-13, UPC, ISBN, Code39, Code128, Code128B, Code128B, RAWCode128, Interleaved25, CBR, MSI, PLS and Code93

Для php библиотеки все немного скромнее — встроены в нее только EAN-13/ISBN, но если скрипт обнаружит распакованную утилиту genbarcode, то сразу становятся доступны все вышеперечисленные стандарты.

Подключение библиотеки происходит в 2 этапа:

  1. Распаковка
  2. Установка пути к библиотеке в файле  php-barcode.php

Строки выглядят примерно так:

$genbarcode_loc="c:\winnt\genbarcode.exe";
$genbarcode_loc="/usr/local/bin/genbarcode"; // используется по умолчанию

Не думаю что стоит описывать процесс установки 3-х скромных файлов, которые в свою очередь адекватно документированы в исходных текстах, тем более что для выполнения операции не требуется каких-либо сверх способностей :-)

Скачать файлы можно с сайта автора http://www.ashberg.de/php-barcode/download/

На этом все!

ЗЫ: думаю будет уместно упомянуть о генерации 2D штрих кода (Semacode), который в отличие от привычных нам «полосок», может хранить существенно больший объем информации, доходящий до нескольких килобайт. Подробнее на этой технологии я остановлюсь позже, а пока можете изучать вопрос самостоятельно, например тут: http://www.splitbrain.org/blog/2007-06/12-php_semacode_encoder

 


Источник: http://rulinux.org/?p=150

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Программирование в командной строке используя PHP

Ubuntu предоставляет в комплекте с пакетом apache2 утилиты для включения\выключения виртуальных хостов и модулей. Однако, создание конфигов для виртуальных хостов отнимают дополнительное время. Поэтому, мне захотелось исправить этот недостаток. Можно было, конечно, сделать автоматические поддомены для апача, но я решил написать скрипт, который создает файлы конфигурации виртуальных хостов для апача, а так же, при необходимости, добавляет имя хоста в файл /etc/hosts. Я не очень хорошо пишу скрипты в bash’e, поэтому решил использовать PHP для моей довольно простой задачи, который я, к тому же, знаю довольно неплохо.
Итак, в этой статье мы сделаем сразу две полезных вещи: ознакомимся с операциями ввода\вывода командной строки в PHP и напишем скрипт, который совсем немного упростит нам жизнь.

Проверка прав доступа

Наверное, ни для кого не секрет, что достаточно просто в первой строке PHP скрипта написать
#!/usr/bin/env php
и такой скрипт можно будет выполнить как обычную программу в Linux.

Прежде всего, нам нужно проверить, есть ли у нас право на запись в ту самую папку, которая содержит в себе конфиги виртуальных хостов, а обычно для этого нужны root права. Проверить это довольно просто:

  1. $virtual_hosts_dir = «/etc/apache2/sites-available/»;
  2. if (!is_dir($virtual_hosts_dir) || !is_writable($virtual_hosts_dir))
  3. {
  4.     echo «You must run this script as root!\n«;
  5.     exit;
  6. }

 

Получение информации из параметров

Далее, нам необходимо узнать у пользователя некоторую информацию, которая нам нужна для создания конфига. Кроме последовательного ввода из консоли, можно передать эту информацию в качестве параметров, которые мы передаем при вызове скрипта. В PHP есть глобальные переменные $argc и $argv. Первая содержит количество входящих параметров, а вторая — массив со входящими параметрами. По-умолчанию входящий параметр всего один — полный путь к вызываемому скрипту. Таким образом, обработка входящих переменных сводится просто к обработке массива:

  1. if ($argc>1)
  2. {
  3.     for ($i=1; $i<$argc; $i++)
  4.     {
  5.         $option = explode(«=», $argv[$i]);
  6.         switch ($option[0])
  7.         {
  8.             case «-h»:
  9.             case «—add-to-hosts»:
  10.                 $add_to_hosts = true;
  11.             break;
  12.             case «-n»:
  13.             case «—no-add-to-hosts»:
  14.                 $add_to_hosts = false;
  15.             break;
  16.             case «-a»:
  17.             case «—server-alias»:
  18.                 if (isset($option[1]))
  19.                 {
  20.                     $server_alias = $option[1];
  21.                 }
  22.                 else
  23.                 {
  24.                     echo «Wrong option: {$argv[$i]}\n«;
  25.                 }
  26.             break;
  27.             case «-d»:
  28.             case «—document-root»:
  29.                 if (isset($option[1]))
  30.                 {
  31.                     if ($option[1] == «default»)
  32.                     {
  33.                         $document_root = $default_doc_root
  34.                     }
  35.                     else if (is_dir(dirname($option[1])))
  36.                     {
  37.                         $document_root = $option[1];
  38.                     }
  39.                 }
  40.                 else
  41.                 {
  42.                     echo «Wrong option: {$argv[$i]}\n«;
  43.                 }
  44.             break;
  45.             default:
  46.                 if (substr($argv[$i], 1, 1) == ‘-‘)
  47.                 {
  48.                     echo «Unknown option: {$argv[$i]}\n«;
  49.                 }
  50.             break;
  51.         }
  52.     }
  53. }

 

Потоки ввода\вывода

Но не всегда ведь удобно вбивать кучу параметров в консоль. Поэтому теперь мы просим пользователя ввести с клавиатуры то, что нам до сих пор неизвестно. Для этого нам понадобятся потоки ввода\вывода, а в данном случае только ввода. В PHP для работы с потоками ввода\вывода используются константы STDIN, STDOUT, STDERR. По сути, эти потоки ничем не отличаются от файловых потоков и работать с ними так же просто. Например, строка:

  1. $line = fgets(STDIN);

просто считает строку из консоли и запишет её в переменную $line. В данном случае, мы не открывали и не закрывали поток, т.к. PHP делает это автоматически. Но, мы можем открыть поток вручную и держать его открытым столько, сколько нам нужно. Это будет работать быстрее, если Вам нужно считать\записать более одной строки:

  1. $stdin = fopen(«php://stdin», «r»);
  2. $line1 = gets($stdin);
  3. $line2 = gets($stdin);
  4. fclose($stdin);

В данном случае мы сначала открываем поток, считываем из него две строки и закрываем его.
С записью аналогично, хотя я предпочитаю для вывода на экран просто использовать echo.

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

  1. while (!$server_alias)
  2. {
  3.     echo «Enter your hostname: «;
  4.     $server_alias = trim(fgets(STDIN));
  5. }

Теперь, спросим у пользователя, нужно ли добавлять информацию о этом хосте в /etc/hosts, но спрашиваем только в том случае, если эта информация не была передана в качестве параметра. Так как скрипт я писал себе для повседневной работы, то никаких реальных сайтов у меня не будет и чаще всего нужно будет добавлять хост в /etc/hosts, поэтому если мы ничего не вводим, а просто нажимаем Enter то это принимается как согласие:

  1. if ($add_to_hosts === null)
  2. {
  3.     echo «Add $server_alias to your /etc/hosts ? (Y/N) [Y]: «;
  4.     $line = trim(fgets(STDIN));
  5.     if ($line == ‘n’ || $line == ‘N’)
  6.     {
  7.         $add_to_hosts = false;
  8.     }
  9.     else
  10.     {
  11.         $add_to_hosts = true;
  12.     }
  13. }

То же самое и с корневой директорией сайта:

  1. if (!$document_root)
  2. {
  3.     $default_doc_root = $default_doc_root.‘/’.$server_alias;
  4.     echo «Enter your document root [$default_doc_root]: «;
  5.     $line = trim(fgets(STDIN));
  6.     if ($line && is_dir(dirname($line)))
  7.     {
  8.         $document_root = $line;
  9.     }
  10.     else
  11.     {
  12.         $document_root = $default_doc_root;
  13.     }
  14. }

 

Генерация конфиг-файла

На этом этапе весь сбор информации закончен и у нас есть все, что нужно, для того, чтобы создать конфиг. Надо убедится, что корневая директория сайта существует, а если её нет — создадим её:

  1. if (!is_dir($document_root))
  2. {
  3.     mkdir($document_root);
  4. }

Мы спрашивали у пользователя по поводу добавления хоста в /etc/hosts. Сделаем это, если он согласился:

  1. if ($add_to_hosts)
  2. {
  3.     $hosts = file_get_contents(«/etc/hosts»);
  4.     $hosts .= «127.0.0.1\t$server_alias\n«;
  5.     file_put_contents(«/etc/hosts», $hosts);
  6. }

Собственно так выглядит шаблон нашего конфига:

  1. $host_template = <<<HOST
  2. <VirtualHost *:80> 
  3. ServerAdmin i@bogus.in 
  4. ServerAlias $server_alias
  5.  
  6. DocumentRoot $document_root 
  7. <Directory $document_root> 
  8.     Options Indexes FollowSymLinks MultiViews 
  9.     AllowOverride All 
  10.     Order allow,deny 
  11.     allow from all 
  12. </Directory>
  13.  
  14. ErrorLog \${APACHE_LOG_DIR}/$server_alias-error.log; 
  15. LogLevel warn 
  16. CustomLog \${APACHE_LOG_DIR}/$server_alias-access.log combined
  17. </VirtualHost>
  18. HOST;

Ну и теперь просто запишем конфиг в файл и напомним пользователю о том, что конфиг теперь нужно еще и активировать с помощью a2ensite:

  1. file_put_contents(«/etc/apache2/sites-available/$server_alias«, $host_template);
  2. echo «Apache config for this hostname created successfully! Don’t forget to run a2ensite $server_alias\n«;

Скрипт написан. Нужно сохранить его в файл и не забыть установить флаг +x, чтобы его можно было запускать как программу:
chmod +x a2addsite

Использование

Теперь скрипт можно использовать. Можно как вводить всю информацию в консоли:
% sudo ./a2addsite
Add test.local to your /etc/hosts? (Y/N) [Y]:
Enter your document root [/home/www/test.local]:
Apache config for this hostname created successfully! Don’t forget to run a2ensite test.local

так передавать всю или часть информации скрипту в качестве параметров при вызове:
% sudo ./a2addsite —server-alias=test2.local —add-to-hosts —document-root=default
Apache config for this hostname created successfully! Don’t forget to run a2ensite test2.local

Выводы

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

Литература

Больше информации о потоках ввода вывода, а также о остальных особенностях работы с консолью в PHP можно получить на официальном сайте PHP (англ.):
Command line usage
PHP input/output


Источник: http://habrahabr.ru/post/112146/

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)