PHP и ЧПУ, что это и как с ними работать?
На днях нужно было быстренько состряпать простое подобие ЧПУ, для 4-6 страниц. Смысл заключался в том, что есть header (картинка с меню) и футер (картинка), а в центре должен был меняться текст. Т.к. страниц было всего от 4 до 6 то речи о CMS в принципе быть и не могло (не тот масштаб).
Было решено сделать до боле глупое решение. (на нем хорошо просматривается принцип работы ЧПУ).
Есть файл .htaccess со следующим содержимым:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L] (далее…)
Если при добавлении записей в базу данных MySQL возникает проблема связанная с max_allowed_packet, то скорее всего тот блок данных превышает максимальный допустимый размер.
Есть два способа изменить это значение:
1. Меняем max_allowed_packet в my.cnf
обычно в
/etv/my.cnf добавляем строчку
max_allowed_packet = 16M
2. Запуск MySQL с ключом --max_allowed_packet
Это до первой перезагрузки
mysqld --max_allowed_packet=16M
Функционал Волшебных кавычек (Magic Quotes) - перехватывать данные, которые получает скрипт (массивы $_POST, $_GET и т.д.) и экранировать в них специальные символы.
Разработаны для защиты от хакерских атак вроде SQL Injection, но на практике от них больше проблем, чем пользы.
Посмотреть текущие настройки можно с помощью
phpinfo(). (если
Magic Quotes включена, в разделе
Configure Command будет строка
--enable-magic-quotes).
Отключение Волшебных кавычек (Magic Quotes)
в .htaccess:
php_flag magic_quotes_gpc Off
в php.ini:
magic_quotes_gpc Off
Отключает Magic quotes для входящих данных из массивов GET/POST/Cookie.
(далее…)
Для выстраивания правильных путей для подключения файлов в скриптах, которые тоже подключаются в PHP можно использовать волшебные константы:
__FILE__
Полный путь и имя текущего файла. Если используется внутри подключаемого файла, то возвращается имя данного файла. Начиная с версии PHP 4.0.2,
__FILE__ всегда содержит абсолютный путь с разрешенными символическими ссылками, тогда как в старых версиях в некоторых обстоятельствах возвращался относительный путь.
__DIR__
Директория файла. Если используется внутри подключаемого файла, то возвращается директория этого файла. Это эквивалентно вызову
dirname(__FILE__). Возвращаемое имя директории не оканчивается на слэш, за исключением корневой директории (добавлена в PHP 5.3.0.)
Установка собственного шрифта на сайт.
Иногда это приходится делать, и использовать для этого не стандартные шрифты. Чтобы их увидели не только вы но и посетитель сайта, этот шрифт как то надо закачать на компьютер посетителя, первый способ такой:
<style type="text/css">
p {font-family: URL шрифта (к примеру, www.ваш домен.ru/font.ttf) ;}
</style>
второй вариант и более правильный вот такой:
<style>
@font-face {
font-family: mriam;
src: url(http://ваш домен/font.ttf);
}
</style>
<p style="font-family: название шрифта; font-size: 10px">текст</p>
Усовершенствованный var_dump на php (dumphper)
На просторах интернета отыскал очень удобный дампер, лучше чем стандартный var_dump.
Собственно чем же он лучше, ну во-первых вся информация выводиться намного читабельнее, нет ограничения ко кол-ву символов, да и вообще все на много проще и удобнее.
|
class Dumphper { /** config **/ static $encoding = 'UTF-8'; /** Text encoding, needed to escape stings **/ static $escape_keys = false; /** Should array keys be escaped (slow) **/ static $max_showw_depth = 1; /** Defines how many nested levels will be expanded by default **/ /** don't touch **/ static $objects = array(); static $calls = 0; static $depth = 0; |
(далее…)
csv парсер на php, очень простой и в некоторых случаях очень нужный скрипт. Написан был не мной, автору респект, надеюсь не обидится т.к. не помню исходной ссылки на сайт. Пользуйтесь.
|
echo "<table>\n"; ini_set("display_errors","0"); $file = $_POST['file']; $csv_lines = file("xxx.csv"); if(is_array($csv_lines)) { |
(далее…)
Что делать, если стандартная функция php mail() отправляет письма в неверной кодировке.
На самом деле она отправляет что дают и совершенно ничего не проверяет. Что же делать?
Немного теории:
Тело письма может быть текстом в любой кодировке. Немного сложнее дело обстоит с составляющими заголовка письма (Subject, From, To), они по стандарту должны быть в US-ASCII. Использование в заголовках кодированного текста регламентируется стандартом RFC-2047. Стандарт задает две возможные формы кодирования - BASE64 и Quoted-Printable. BASE64 более универсальна и работает в том числе для кодировки UTF-8, поэтому мы будем использовать именно эту форму. MIME-совместимый почтовый клиент обязан уметь читать обе формы.
И практика:
Ниже приведен пример простой функции, которая отправляет в требуемой кодировке MIME-совместимые письма на русском языке в виде простого текста или в формате HTML
(далее…)
Ниже описаны способы сделать редирект (перенаправление) для каждого варианта.
Редирект PHP
|
<?php header("Location: http://google.ru"); ?> |
Не забывать: До заголовка не должно выводиться никаких!!! символов.
Частая проблема - пробел перед
<?php в начале файла
Следующий код работать не будет и даст варнинг:
|
<?php echo 'Редиректа не будет!'; header("Location: http://google.ru"); ?> |
Редирект HTML
|
<meta http-equiv="refresh" content="0; url=http://google.ru"></meta> |
- content - значение указывает количество секунд до переадресации на адрес, указанный в поле url
- url - адрес для редиректа. Туда и перенаправляем.
Редирект JavaScript
|
window.location="http://google.ru"; |
без комментариев... ))
В продолжении - Редирект в .htaccess
(далее…)
Если надо просто выгрузить некую таблицу с сайта как файл excel, то подойдет достаточно простой способ.
Основная идея - excel уже давно умеет сохранять свои документы как html. Ну и самое простое решение - сохраняем любой документ именно так, открываем в текстовом редакторе, смотрим что и как там написано, пытаемся воспроизвести.
Рассмотрим самый банальный пример: (запрос к базе данных не рассматривается... только та часть, которая выгрузит файл, понятный excel'ю.
1. Формируем заголовок:
|
/* // раскомментируйте строки ниже, если файл не будет загружаться header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); */ //стандартный заголовок, которого обычно хватает header('Content-Type: application/vnd.ms-excel; charset=utf-8'); header("Content-Disposition: attachment;filename=".date("d-m-Y")."-export.xls"); header("Content-Transfer-Encoding: binary "); |
2. Теперь можно выводить ранее полученные данные, из MySQL, из файла, еще откуда - не важно. все на ваше усмотрения. Главное НЕ забыть сформировать стандартную HTML шапку под правильную кодировку (например utf-8) что бы в excel корректно отображалась кириллица. И не забываем про то, что кодировка файла скрипта также должна быть такой же.
|
echo ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="author" content="zabey" /> <title>Demo</title> </head> <body> '; |
3. И вот формирование самой таблицы, которая откроется в Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
// заголовок таблицы echo ' <table border="1"> <tr> <th>Колонка 1</th> <th>Вторая колонка</th> </tr> '; while($row = $STH->fetch()){ // формирование тела таблицы. Выберете ваш метод самостоятельно. echo '<tr> <td>'.$row['col1'].'</td> <td>'.$row['col2'].'</td> </tr>'; } echo '</table>'; echo '</body></html>'; // не забываем закрывать таблицу, боди и сам хтмл документ |
Код одним блоком внутри (далее).
(далее…)
Свежие комментарии