Главная > Скрипты и коды > Полезные PHP-сниппеты и функции

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


16 октября 2012, 13:15. Разместил: Design FactoRy
Каждый веб-разработчик должен иметь при себе набор удобных и пригодных сниппетов, которые он мог бы использовать в последующих проектах. Сегодня мы хотим предложить вам самые интересные и удобные PHP-сниппеты, которые мы сами частенько используем в собственных проектах.

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

Конвертация файлов .pdf в .jpg при помощи PHP и Image Magick

Здесь мы хотим предложить вам отрывок кода для конвертации файлов .pdf в .jpg-изображения. Это очень удобный сниппет, особенно если вам нужно генерировать миниатюры предварительного просмотра из psd-файлов. Учтите, что у вас на сервере должно быть установлено расширение Image Magick, чтобы использовать данный сниппет.

$pdf_file   = './pdf/demo.pdf';
$save_to = './jpg/demo.jpg'; //make sure that apache has permissions to write in this folder! (common problem)

//execute ImageMagick command 'convert' and convert PDF to JPG with applied settings
exec('convert "'.$pdf_file.'" -colorspace RGB -resize 800 "'.$save_to.'"', $output, $return_var);


if($return_var == 0) { //if exec successfuly converted pdf to jpg
print "Conversion OK";
}
else print "Conversion failed.<br />".$output;

Проверка вкраплений в базу данных на безопасность

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

function cleanInput($input) {

$search = array(
'@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<[/!]*?[^<>]*?>@si', // Strip out HTML tags
'@<style[^>]*?>.*?</style>@siU', // Strip style tags properly
'@<![sS]*?--[ tnr]*>@' // Strip multi-line comments
);

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

// Usage:
$bad_string = "Hi! <script src='http://www.evilsite.com/bad_script.js'></script> It's a good day!";
$good_string = sanitize($bad_string);
// $good_string returns "Hi! It's a good day!"

// Also use for getting POST/GET variables
$_POST = sanitize($_POST);
$_GET = sanitize($_GET);

Создание URI на изображения при помощи PHP

Вместо того чтобы предоставлять прямые ссылки до изображений, вы можете создавать base64-зашифрованные ссылки внутри атрибута src. Это позволяет экономить запросы для каждого изображения и предотвратить разоблачение путей до директорий. Учтите, что Ie7 и более ранние версии не поддерживают подобные URI.

// A few settings
$image = 'cricci.jpg';

// Read image path, convert to base64 encoding
$imageData = base64_encode(file_get_contents($image));

// Format the image SRC: data:{mime};base64,{data};
$src = 'data: '.mime_content_type($image).';base64,'.$imageData;

// Echo out a sample image
echo '<img src="',$src,'">';

Генерируем CSV-файл с PHP-массива

Предлагаем простенькую, но очень эффективную функцию для генерации .csv-файла из PHP-массива. Функция принимает 3 параметра: данные, csv-разделитель (по умолчанию это запятая), а также csv-приложение (по умолчанию это двойные кавычки).

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-файл, который нужно распаковать, и конечная директория.

function unzip_file($file, $destination){
// create object
$zip = new ZipArchive() ;
// open archive
if ($zip->open($file) !== TRUE) {
die ('Could not open archive');
}
// extract contents to destination directory
$zip->extractTo($destination);
// close archive
$zip->close();
echo 'Archive extracted to directory';
}

Определение расположения по IP

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

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 => 'http://' . $_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;
}

}

Ведение лог-файла об ошибках по электронной почте

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

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

function nettuts_error_handler($number, $message, $file, $line, $vars){
$email = "
<p>An error ($number) occurred on line
<strong>$line</strong> and in the <strong>file: $file.</strong>
<p> $message </p>";

$email .= "<pre>" . print_r($vars, 1) . "</pre>";

$headers = 'Content-type: text/html; charset=iso-8859-1' . "rn";

// Email the error to someone...
error_log($email, 1, 'you@youremail.com', $headers);

// Make sure that you decide how to respond to errors (on the user's side)
// Either echo an error message, or kill the entire project. Up to you...
// The code below ensures that we only "die" if the error was more than
// just a NOTICE.
if ( ($number !== E_NOTICE) && ($number < 2048) ) {
die("There was an error. Please try again later.");
}
}

// We should use our custom function to handle errors.
set_error_handler('nettuts_error_handler');

// Trigger an error... (var doesn't exist)
echo $somevarthatdoesnotexist;

Удаление HTML-тэгов с документа Microsoft Word

Если вы работаете с клиентами, то мы смеем предположить, что у вас уже возникали проблемы с тем, что люди часто копируют текст из документа Microsoft Word, что приводит к проблемам с версткой и различным проблемам в коде…

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

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
}

Автоматические водяные знаки

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

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);
}

/******** usage **********/
$SourceFile = '/home/user/www/images/image1.jpg';
$DestinationFile = '/home/user/www/images/image1-watermark.jpg';
$WaterMarkText = 'Copyright phpJabbers.com';
watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile);

Автоматически ссылки mailto

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

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

Вернуться назад