Каждый веб-разработчик должен иметь при себе набор удобных и пригодных сниппетов, которые он мог бы использовать в последующих проектах. Сегодня мы хотим предложить вам самые интересные и удобные 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);
Вернуться назад
|