Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Web-дизайн и web-программирование: статьи, скрипты. Журнал Хостинг-Пресса - скачать бесплатно!


Содержание
выпуск №1
  • Скрипт персональной открытки
  • Рубрика "Вопрос-Ответ"
  • Журнал "Хостинг-Пресса"


 

Реорганизация рассылки:

После длительной паузы рассылка сменила владельца и возобновляет свою работу.

О чём мы будем говорить?

Поскольку рассылка посвящена WEB-программированию, то речь пойдёт о
PHP, MySQL, javascript, ajax, и т.д.

А также о настройке среды - хостинга, виртуального или выделенного сервера.

Практика, бесценная практика!

Каждый выпуск рассылки будет состоять из:

  • Статья на тему веб-программирования, примеры скриптов
  • Рубрика "Вопрос-Ответ". Специалисты отвечают на вопросы читателей.

Только качественные материалы для Вас!

Каждая статья будет участвовать в голосовании на звание
"Лучшая статья номера" и "Лучшая статья месяца".

Отдав свой голос, Вы сделаете рассылку ещё лучше, полезнее и интереснее.

Мы будем награждать авторов лучших статей.

Скрипт персональной открытки:


Однажды мне потребовалось поздравить нескольких знакомых с праздником. Мне захотелось поздравить своих знакомых и подарить персонально подписанную открытку.

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

Взвесив все за и против, я решил написать несложный php-скрипт, который используя возможности расширения php-gd, способен персонально подписать графический шаблон открытки.

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

Итак, заготовим графический шаблон открытки:

и запасемся терпением, чтобы написать скрипт:


<?php
/* Указываем путь к файлу шрифта */
$font_file = 'arialbd.ttf';
/* Цвет надписи в виде array(R, G, B). (0, 0, 0) - черный*/
$font_color = array(142, 197, 220);
/* путь к шаблону изображения */
$image_file = 'image.jpg';
/*
Имена тех, кого мы хотим поздравить, мы берем оттуда, где мы их храним,
здесь они приводятся просто в виде массива, в котором ключами являются
ключи доступа к каждой открытке.
*/
$names = array(
'q6smifvx' => 'Василий',
'rs65p0y9' => 'Иван',
'0dll7x55' => 'Петр',
);
/*
Если данные клиентов хранятся в БД, можно создать специальную SQL-таблицу для ключей, сопоставив ключи идентификатору клиента. Здесь все зависит от вашей фантазии и ловкости рук :)
Задаем строки которые мы хотим видеть на открытке.
Каждая строка представлена массивом в виде (x, y, угол, размер_шрифта,
строка), где
x - x-координата строки на открытке
y - y-координата
угол - угол наклона строки в градусах
При желании, вы можете для каждой строки указать цвет, шрифт и другие
параметры ;)
*/
$strings = array(
array(30, 350, 15, 25, '%name%!'),
array(30, 388, 0, 20, 'Поздравляем Вас с праздником!'),
array(30, 418, -15, 20, 'Желаем Вам, %name%, всего хорошего!'),
array(30, 448, -30, 20, 'Спасибо за Ваше доверие к нам!'),
);
/*
Строки в windows-1251 не будут корректно отображаться, поэтому их нужно
конвертировать в utf-8
Если вы пишете скрипт в windows-1251, можно сразу же сконвертировать массив
строк в utf-8
*/
foreach ($strings as $key=>$a) {
$strings[$key][4] = iconv('cp1251', 'utf-8', $a[4]);
}
/* Проверяем есть ли в URL вашего скрипта ключ открытки и верен ли он */
if (!isset($_GET['key'], $names[$_GET['key']])) die("URL открытки указан
неверно!");
/* Получаем имя того, кому адресуется открытка */
$name = $names[$_GET['key']];
/* Если имя - в windows-1251, конвертируем его в utf-8 */
$name = iconv('cp1251', 'utf-8', $name);
/*
Создаем массив, в котором имена переменных шаблона строки сопоставлены
значениям для конкретного человека. В нашем случае %name% - имя, но вы можете
добавить и другие переменные на ваше усмотрение :)
*/
$params = array(
'%name%' => $name
);
/* Создаем изображение */
$im = imagecreatefromjpeg($image_file);
if (!$im) die('Ошибка открытия изображения!');
/*
Получаем идентификатор цвета для текста из значений красной, зеленой и синей
составляющей
*/
$font_color = imagecolorallocate($im, $font_color[0], $font_color[1],
$font_color[2]);
// Для каждой строки текста
foreach ($strings as $stra) {
// Получаем x, y координаты строки и саму строку
list($x, $y, $angle, $font_size, $text) = $stra;
// Заменяем переменные (в нашем случае имя - %name%) их значениями
$text = strtr($text, $params);
// И наносим строку текста на рисунок при помощи функции библиотеки GD
imagettftext
imagettftext($im, $font_size, $angle, $x, $y, $font_color, $font_file,
$text);
}
/*
После нанесения всех строк остается показать открытку в браузере, для чего
устанавливаем заголовок Content-type:image/jpeg,
иначе php отправит Content-Type: text/html
и браузер попытается открыть изображение как html-страницу :)
*/
header('Content-type:image/jpeg');
/* Отдаем jpeg-изображение */
imagejpeg($im);
/* Освобождаем ресурсы, занятые под изображение */
imagedestroy($im);
?>


Наконец, скрипт готов.

Остается сделать рассылку для пользователей, в которой каждому пользователю высылается индивидуальная ссылка на персонально адресованную открытку в виде

http://ваш_домен.com/скрипт_открытка.php?key=ключ_открытки  (например, для Василия ключ -q6smifvx) и наслаждаться эмоциями получателей вашей рассылки, когда они увидят красочную открытку, адресованную лично им:



 

Проголосовать за статью и оставить комментарий>>
 

Рубрика "Вопрос-Ответ":

Несколько вопросов, актуальных для начинающих (и как показывает практика и не очень начинающих) PHP-программистов по применению PHP на Unix-хостинге.

1. Что такое phpinfo и где его увидеть.

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

Содержание скрипта выглядит очень просто:
<?php phpinfo(); ?>

Выкладываете это файлик по FTP или создаете в файл-менеджере панели управления хостином - и вот ваш phpinfo готов! Наберите адрес скрипта в браузере и вы увидите phpinfo!

Рекомендуем называть такой скрипт не phpinfo.php или info.php, а нестандартным именем, лишь бы расширение имени файла было .php, чтобы нечистый на руку посетитель вашего сайта не смог увидеть ваши настройки.

2. Какой нехороший человек придумал эти права ? Почему у меня постоянно permission denied ?

Отбросив нюансы, которые более интересны администраторам серверов, а не PHP-программистам, следует отметить, что на Unix-хостингах существуют две основные модели подключения обработчика PHP.

PHP как модуль apache. Наиболее распространен на русскоязычных Unix-хостингах. При этом подключении PHP включен в процесс веб-сервера Apache и выполняется с правами пользователя веб-сервера, а не владельца аккаунта.

Этот способ подключения хорош во многих отношениях, но имеются также несколько неприятных моментов. Один из них - права.

Ваш php-скрипт не сможет создать файл в каталоге с правами по-умолчанию, для такого каталога вам нужно установить права 777. Если скрипту требуется выполнять запись в файл - поставьте на этот файл права 666.

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

PHP как CGI/FastCGI/suphp-CGI. Наиболее распространен на импортных Unix-хостингах. На русскоязычных хостингах используется реже, но часто существет как альтернативный PHP-обработчик на серверах, где PHP подключен как модуль.

При таком подключении проблем с правами ни у вас, ни у вашего скрипта нет, поскольку CGI-php работает от имени владельца аккаунта. Но в этом случае вашему скрипту полностью доступны все без исключения ваши файлы и каталоги! Особенно это опасно, если вы используете устаревшую версию известного скрипта, в котором все дыры известны опытному хакеру наперечет.

Поскольку CGI работает с привилегиями владельца аккаунта, то и доступны ему для записи каталоги и файлы с правами по-умолчанию (755 и 644 соответственно) и дополнительных разрешений ставить не нужно.

В то же время, пожалуйста учтите, что php-скрипт который находится в каталоге с правами на запись для всех или для группы (777) или скрипт, имеющий такие права (666, 777) может не выполняться из соображений безопасности (ошибка 500)!

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

3. Как изменить настройки PHP ?

Если на вашем хостинге PHP включен как модуль, то менять настройки PHP требуется в файле .htaccess.

Используйте директивы php_value и php_flag. Указывайте php_value для директив, которые имеют числовое или строковое значение.

Например:
php_value upload_max_filesize 16M
php_value post_max_size 24M

Для директив, предполагающих булевое значение используйте php_flag.

Например
php_flag register_globals Off
или
php_flag register_globals 0

Если в phpinfo вы видите Server API - CGI (или FasgCGI) попробуйте в каталоге, где находится ваш php-скрипт, создать файл php.ini.

Если переопределение настроек разрешено политикой безопасности вашего хостера, вместо базового конфига будет читаться ваш файл.

В него пропишите настройки в том формате, в котором они указываются в ini-файле.
upload_max_filesize = 16M
post_max_size = 24M
register_globals = Off

Будьте готовы, что в этом случае могут "отвалиться" Zend Optimizer, Ioncube Loader и другие модули, которые подключаются в базовом php.ini.
Если вы подключаете ваш php.ini, то базовый игнорируются. Используются настройки PHP по-умолчанию плюс скорректированные настройками в вашем php.ini.

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

4. Почему я не могу использовать на хостинге WMKeeper ? У меня вываливается ошибка "Warning: shell_exec() has been disabled for security reasons ..."!

Если на вашем хостинге PHP включен как модуль (Server API - Apache или Apache 2.0 Handler в phpinfo), то хостер вынужден запрещать такие функции как shell_exec, system, dl, passthru, exec, popen и другие, позволяющие php-скрипту выполнять программы операционной системы.

Это сделано потому, что пользователь, под которым работает веб-сервер (и php-модуль) имеет доступ к каталогам всех пользователей. И, несмотря на ограничение open_basedir, нехороший клиент может попытаться просмотреть содержимое каталога другого пользователя из PHP например при помощи системных команд:
echo `ls -l /каталог/другого/пользователя`;

Использовать такие функции вы можете, если есть возможность подключения PHP как CGI. В этом случае защита директорий пользователей осуществляется на уровне прав операционной системы.

Отключение запрещенных фукнций в PHP-CGI осуществляется при помощи создания пустого php.ini файла в каталоге скрипта, если переопределение настроек разрешено политикой безопасности вашего хостера.


5. Почему сайт на PHP, который отлично работает в Windows на Денвере, не работает на вашем глючном хостинге?

Если, для перенесенных с Windows, CGI-скриптов можно было не глядя назвать две наиболее популярные причины: права и символ возврата каретки, то при переносе php-скриптов эти проблемы, как правило, не встречаются.

Зато наблюдаются (хоть и не так часто) другие:

  • Имена файлов. Старо как мир, что в Unix-системах, в отличие от Windows, FILE и file - два разных файла, но этот момент время от времени упускают из виду как юнцы, так и убеленные сединами ветераны :) Особенно если ваш FTP-клиент, после установки по-умолчанию, переводит имена файлов в нижний регистр.
     
  • Вы залили дистрибутив скрипта, закодированного Zend Encoder и видите - PHP Fatal error: Unable to read ххх bytes. Можно конечно сказать хостеру, что у него глючный сервер, а можно "поблагодарить" ваш FTP-клиент и собственную невнимательность, потому что вы залили закодированные файлы в текстовом режиме, а нужно обязательно в двоичном!
     
  • Вы закачали PHP-скрипт и видите: Access denied for user 'root'@'localhost' (using password: NO).

    Нужно в панели управления хостингом создать БД, пользователя БД, предоставить пользователю привилегии и прописать данные доступа к базе в конфиге скрипта.

    Как root, да еще и без пароля, вы к БД на хостинге не подключитесь :)

    На хостинге под управлением Cpanel вы можете использовать для доступа к MySQL те же логин и пароль, которые вы используете для входа в cpanel, но этого лучше никогда не делать. Причины две - первая: данные доступа к аккаунту лежат в открытом виде и через уязвимость в скрипте кто-нибудь может их узнать и зайти в вашу Cpanel или FTP; вторая: вы измените пароль аккаунта в CPanel и у вас "ляжет" сайт :)

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

    С root-доступом в MySQL это можно сделать при помощи двух несложных SQL-запросов:
    CREATE DATABASE имя_базы;
    GRANT ALL ON имя_базы.* TO имя_пользователя@localhost IDENTIFIED BY 'пароль';
    В этом случае вы можете смело заменять серверный конфиг локальным - и сайт продложит работу.
     
  • Cannot send session cookie - headers already sent by (output started at ...

    Суть проблемы в том, что вы пытаетесь отправить cookie-заголовок после того, как в браузер уже были отправлены данные. В этом случае нужно просмотреть скрипт, имя которого указано в ошибке (output started at ...). Часто при редактировании конфигов пользователи добавляют строки после завершающего php-тега "?>". Пустые строки за рамками PHP-тегов - тоже информация, которая выводится в браузер посетителя сайта.

    Совет: никогда не редактируйте скрипты в кодировке utf-8 в блокноте Windows. Он добавляет в самое начало скрипта три байта, по которым он впоследствии понимает, что этот файл в utf-8. Это символы с кодами 0xEF, 0xBB, 0xBF, в десятиричном - 239, 187, 191, в текстовом виде это выглядит так "п»ї<?php ...". Но PHP-интерпретатор выводит эти символы вне PHP-тегов в браузер клиента "как есть".
     
  • Ошибка 500. Попробуйте переименовать .htaccess во что-то другое - возможно ошибка в нем. Некоторые apache1 не работают в apache2, и, наоборот, apache1 не знает некоторых директив apache2. Если не помогло - переименуйте обратно. Вообще следует отметить, что более новые версии ПО более требовательны к синтаксису. Это относится и к apache mod_rewrite и к PHP и к MySQL.

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

    Поищите в каталоге скрипта error_log - зачастую в нем вы можете найти ошибки PHP, если PHP включен как CGI.


Если ничего не помогло - обращайтесь к хостеру :)


При обращении к хостеру, будьте максимально скрытны. Пожалуйста, напишите с постороннего e-mail адреса, не указывайте ни номера заказа, ни адреса сайта, ни сути проблемы и обязательно выругайте его. В этом случае, хостер вам обязательно постарается помочь в кратчайшие сроки! :)))

[шутка]

Проголосовать за статью и оставить комментарий>>
 

Журнал "Хостинг-Пресса":

Декабрь 2009

Содержание выпуска:

  • Реселлинг и 5 правил успешных продаж
  • Представительство в России
  • Новогодние советы
  • Как кризис заставил сайт делать                                                

Скачать и обсудить журнал можно здесь>>
 


Вы хотите задать вопрос в рубрику "Вопрос-Ответ"?

У Вас есть пожелания по тематике статей рассылки?

Желаете стать автором статей и получать денежный гонорар?

Пишите на maillist@imhoster.net
 

 

Домены - мгновенная регистрация

Хостинг | Реселлерам | VPS/VDS | Серверы | Конструктор сайтов
 

Партнерская программа © Copyright 2004-2010 ImHoster.Net
All Right Reserved

В избранное