Полезные сниппеты и функции PHP

Каждый веб-разработчик хранит полезные фрагменты кода в своей личной библиотеке, чтобы не "изобретать велосипед" каждый раз заново. В данной статье собраны наиболее интересные и полезные фрагменты PHP-кода, которые я добавил к своей личной библиотеке за последние 3 месяца. 

Конвертация PDF-файлов в JPG с помощью PHP и Image Magick


Этот простой фрагмент PHP-кода конвертирует PDF-файл в изображение JPG. Это очень полезно, если вам нужно создать изображение для предварительного просмотра ваших файлов в формате PDF. Пожалуйста, обратите внимание, что у вас должно быть установлено расширение Image Magick на вашем сервере, чтобы использовать этот код.

 
Code
 
$pdf_file = './pdf/demo.pdf';

$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;

Проверка записываемой информации в базу данных


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

 
Code
 
function cleanInput($input) {

   

  $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 и ниже, это работать не будет.

 
Code
 
// имя изображения

$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 (по умолчанию - двойные кавычки).

 
Code
 
function generateCsv($data, $delimiter = ',', $enclosure = '"') {

  $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-архив и папку, в которую нужно архив распаковать.

 
Code
 
function unzip_file($file, $destination){

  // создаем объект

  $zip = new ZipArchive() ;

  // открываем архив

  if ($zip->open($file) !== TRUE) {

  die ('Невозможно открыть архив');

  }

  // распаковываем содержимое в указанную директорию

  $zip->extractTo($destination);

  // закрываем архив

  $zip->close();

  echo 'Архив распакован';

}


Определить местонахождение по IP


Этот полезный фрагмент кода поможет вам определить местоположения конкретного IP. Функция принимает один IP в качестве параметра, и возвращает местоположение. Если местоположение не найдено, возвращается UNKNOWN.

 
Code
 
function detect_city($ip) {



  $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


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

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

 
Code
 
function nettuts_error_handler($number, $message, $file, $line, $vars){

  $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, который можно безопасно использовать на сайте.

 
Code
 
function cleanHTML($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

}

Автоматическое добавление водяных знаков на изображение


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

 
Code
 
function watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile) {  

  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. Довольно полезно на приватных приложений, но из-за спамеров я не рекомендую использовать это на сайте, в блоге или на форуме.

 
Code
 
$stringa = "This should format my email address example@domain.com";



$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
Теги: сниппеты, php

Ссылки на статью:

Похожие статьи: