Полезные сниппеты и функции PHP
Конвертация PDF-файлов в JPG с помощью PHP и Image Magick
Этот простой фрагмент PHP-кода конвертирует PDF-файл в изображение JPG. Это очень полезно, если вам нужно создать изображение для предварительного просмотра ваших файлов в формате PDF. Пожалуйста, обратите внимание, что у вас должно быть установлено расширение Image Magick на вашем сервере, чтобы использовать этот код.
$save_to = './jpg/demo.jpg'; //Убедитесь, что Apache имеет разрешения на запись в эту папку! (частая проблема)
//выполните ImageMagick коммандой 'convert' и конвертируйте PDF в JPG с указанными настройками
exec('convert "'.$pdf_file.'" -colorspace RGB -resize 800 "'.$save_to.'"', $output, $return_var);
if($return_var == 0) {
//если конвертация прошла успешно
print "Conversion OK";
}
else print "Ошибка конвертации.
".$output;
Проверка записываемой информации в базу данных
Для того, чтобы обезопасить вашу базу данных от взлома, вы должны тщательно проверять все данные, которые вы собираетесь сохранить. Эта удобная функция проверит сохраняемую информацию и не позволит вставить вредоносный код в базу данных.
$search = array(
'@<script[^>]*?>.*?</script>@si', // Удаляем javascript
'@<;[\/\!]*?[^<>]*?>@si', // Удаляем HTML теги
'@<style[^>]*?>.*?</style>@siU', // Удаляем теги style
'@<![\s\S]*?--[ \t\n\r]*>@' // Удаляем многострочные комментарии
);
$output = preg_replace($search, '', $input);
return $output;
}
function sanitize($input) {
if (is_array($input)) {
foreach($input as $var=>$val) {
$output[$var] = sanitize($val);
}
}
else {
if (get_magic_quotes_gpc()) {
$input = stripslashes($input);
}
$input = cleanInput($input);
$output = mysql_real_escape_string($input);
}
return $output;
}
// Использование:
$bad_string = "Привет! <script src='http://www.evilsite.com/bad_script.js'></script> Какой хороший сегодня день!";
$good_string = sanitize($bad_string);
// $good_string вернет "Привет! Какой хороший сегодня день!"
// Также используйте для проверки POST/GET данных
$_POST = sanitize($_POST);
$_GET = sanitize($_GET);
Создание data URI изображения при помощи PHP
Вместо предоставления традиционного адреса изображения, вы можете использовать данные изображения в кодировке base64 и добавить их в атрибут src. Это экономит сетевые запросы для каждого изображения, и предотвращает попытки несанкционированного доступа к каталогам с изображениями. Обратите внимание, что в IE7 и ниже, это работать не будет.
$image = 'cricci.jpg';
// кодируем изображение в base64
$imageData = base64_encode(file_get_contents($image));
// формат пути к изображению: data:{mime};base64,{data};
$src = 'data: '.mime_content_type($image).';base64,'.$imageData;
//Вывод изображения
echo '<img src="',$src,'">';
Создание CSV-файла из массива PHP
Это простая, но эффективная функция для генерации CSV-файла из массива PHP. Функция принимает 3 параметра: данные, разделители полей CSV (по умолчанию это запятая) и ограничители полей CSV (по умолчанию - двойные кавычки).
$handle = fopen('php://temp', 'r+');
foreach ($data as $line) {
fputcsv($handle, $line, $delimiter, $enclosure);
}
rewind($handle);
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
return $contents;
}
Разархивирование файлов при помощи PHP
Эта функция принимает два параметра: zip-архив и папку, в которую нужно архив распаковать.
// создаем объект
$zip = new ZipArchive() ;
// открываем архив
if ($zip->open($file) !== TRUE) {
die ('Невозможно открыть архив');
}
// распаковываем содержимое в указанную директорию
$zip->extractTo($destination);
// закрываем архив
$zip->close();
echo 'Архив распакован';
}
Определить местонахождение по IP
Этот полезный фрагмент кода поможет вам определить местоположения конкретного IP. Функция принимает один IP в качестве параметра, и возвращает местоположение. Если местоположение не найдено, возвращается UNKNOWN.
$default = 'UNKNOWN';
if (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost')
$ip = '8.8.8.8';
$curlopt_useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)';
$url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
$ch = curl_init();
$curl_opt = array(
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_USERAGENT => $curlopt_useragent,
CURLOPT_URL => $url,
CURLOPT_TIMEOUT => 1,
CURLOPT_REFERER => '<a href="http://' .">http://' .</a> $_SERVER['HTTP_HOST'],
);
curl_setopt_array($ch, $curl_opt);
$content = curl_exec($ch);
if (!is_null($curl_info)) {
$curl_info = curl_getinfo($ch);
}
curl_close($ch);
if ( preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs) ) {
$city = $regs[1];
}
if ( preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs) ) {
$state = $regs[1];
}
if( $city!='' && $state!='' ){
$location = $city . ', ' . $state;
return $location;
}else{
return $default;
}
}
Отсылаем логи ошибок себе на email
Логи ошибок являются чрезвычайно полезными, и их всегда просматривают, чтобы узнать что за проблема произошла. Но давайте будем честны: когда мы думаем, что все в порядке, мы не просматриваем логи очень часто и серьезная ошибка может долго просуществовать на вашем сайте.
Эта функция будет отсылать вам по электронной почте логи, как только ошибка произойдет на вашем сайте. Очень удобно, чтобы быть всегда в курсе проблем вашего сайта.
$email = "
<p>Ошибка ($number) произошла в строке
<strong>$line</strong> в <strong>файле: $file.</strong>
<p> $message </p>";
$email .= "<pre>" . print_r($vars, 1) . "</pre>";
$headers = 'Content-type: text/html; charset=UTF-8' . "\r\n";
// Кому отсылаем email...
error_log($email, 1, ' you@youremail.com', $headers);
// Определитесь как реагировать на ошибки (на стороне пользователя)
// Либо это сообщение об ошибке, или завершить работу скрипта ...
// Этот код прекращает работу скрипта, если ошибка была более чем просто уведомление.
if ( ($number !== E_NOTICE) && ($number < 2048) ) {
die("Произошла ошибка. Попробуйте зайти позже");
}
}
// Мы должны использовать нашу пользовательскую функцию для обработки ошибок.
set_error_handler('nettuts_error_handler');
// Trigger an error... (var doesn't exist)
echo $somevarthatdoesnotexist;
Удаляем HTML-теги добавленные Microsoft Word
Если вы работаете с визуальными редакторами, то, я думаю, вы уже имели множество проблем при вставке текста напрямую из Microsoft Word, это приводит к плохой разметки и различных проблем в коде.
Следующая функция очищает от различного "мусора" код и возвращает чистый HTML, который можно безопасно использовать на сайте.
$html = ereg_replace("<(/)?(font|span|del|ins)[^>]*>","",$html);
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=("[^"]*"|'[^']*'|[^>]+)([^>]*)>","<\1>",$html);
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=("[^"]*"|'[^']*'|[^>]+)([^>]*)>","<\1>",$html);
return $html
}
Автоматическое добавление водяных знаков на изображение
Если вы выкладываете ваши собственные изображения на веб-сайтах, то есть вероятность, что вы не захотите видеть их везде в интернете на следующий день. Для предотвращения кражи изображений необходимо заявить о себе как создателе изображений, и добавление водяных знаков на них, как правило, хорошая идея. Эта функция позволяет автоматически добавлять водяные знаки на ваши изображения.
list($width, $height) = getimagesize($SourceFile);
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($SourceFile);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height);
$black = imagecolorallocate($image_p, 0, 0, 0);
$font = 'arial.ttf';
$font_size = 10;
imagettftext($image_p, $font_size, 0, 10, 20, $black, $font, $WaterMarkText);
if ($DestinationFile<>'') {
imagejpeg ($image_p, $DestinationFile, 100);
} else {
header('Content-Type: image/jpeg');
imagejpeg($image_p, null, 100);
}
imagedestroy($image);
imagedestroy($image_p);
}
/******** использование **********/
$SourceFile = '/home/user/www/images/image1.jpg';
$DestinationFile = '/home/user/www/images/image1-watermark.jpg';
$WaterMarkText = 'Ваш копирайт';
watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile);
Автоматическое добавление ссылки для email-адресов
Следующий код ищет адреса электронной почты в строке, и заменяет их на ссылку mailto. Довольно полезно на приватных приложений, но из-за спамеров я не рекомендую использовать это на сайте, в блоге или на форуме.
$pattern = "/([a-z0-9][_a-z0-9.-]+@([0-9a-z][_0-9a-z-]+\.)+[a-z]{2,6})/i";
$replace = "\\1";
$text = preg_replace($pattern, $replace, $stringa);
echo htmlspecialchars($text);
-
FalleN -
1825 -
1 -
0
Но только нужно ставить наверное на те модули которые обновляться должны не раньше через пару тройку минут
С Уважением, Андрей...