Каждый веб-разработчик хранит полезные фрагменты кода в личной библиотеке, чтобы не "изобретать велосипед" каждый раз заново. В этой статье собраны интересные и полезные фрагменты PHP-кода, которые я добавил в свою библиотеку за последние 3 месяца.
Этот простой фрагмент PHP-кода конвертирует PDF-файл в изображение JPG. Это очень полезно, если вам нужно создать изображение для предварительного просмотра ваших файлов в формате PDF. Пожалуйста, обратите внимание, что у вас должно быть установлено расширение Image Magick на вашем сервере, чтобы использовать этот код.
$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 "Ошибка конвертации.<br />" . $output;
Источник: https://snipplr.com/view/48513
Для того, чтобы обезопасить вашу базу данных от взлома, вы должны тщательно проверять все данные, которые вы собираетесь сохранить. Эта удобная функция проверит сохраняемую информацию и не позволит вставить вредоносный код в базу данных.
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);
Источник: https://css-tricks.com/snippets/php/sanitize-database-inputs/
Вместо предоставления традиционного адреса изображения, вы можете использовать данные изображения в кодировке 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,'">';
Источник: https://davidwalsh.name/data-uri-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; }
Источник: https://snipplr.com/view/66856/generate-csv-file-from-array-using-php/
Эта функция принимает два параметра: zip-архив и папку, в которую нужно архив распаковать.
function unzip_file($file, $destination){ // создаем объект $zip = new ZipArchive() ; // открываем архив if ($zip->open($file) !== TRUE) { die ('Невозможно открыть архив'); } // распаковываем содержимое в указанную директорию $zip->extractTo($destination); // закрываем архив $zip->close(); echo 'Архив распакован'; }
Источник: https://www.catswhocode.com/blog/snippets/unzip-zip-files
Этот полезный фрагмент кода поможет вам определить местоположения конкретного 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 => '<a href="http:// ."" rel="nofollow" target="_blank" >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; } }
Источник: https://www.catswhocode.com/blog/snippets/detect-location-by-ip
Логи ошибок являются чрезвычайно полезными, и их всегда просматривают, чтобы узнать что за проблема произошла. Но давайте будем честны: когда мы думаем, что все в порядке, мы не просматриваем логи очень часто и серьезная ошибка может долго просуществовать на вашем сайте.
Эта функция будет отсылать вам по электронной почте логи, как только ошибка произойдет на вашем сайте. Очень удобно, чтобы быть всегда в курсе проблем вашего сайта.
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, <span id="cloak80e8eace320bb1b97f99c988d200306f">Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.</span><script type='text/javascript'> document.getElementById('cloak80e8eace320bb1b97f99c988d200306f').innerHTML = ''; var prefix = 'ma' + 'il' + 'to'; var path = 'hr' + 'ef' + '='; var addy80e8eace320bb1b97f99c988d200306f = ''you' + '@'; addy80e8eace320bb1b97f99c988d200306f = addy80e8eace320bb1b97f99c988d200306f + 'youremail' + '.' + 'com'; var addy_text80e8eace320bb1b97f99c988d200306f = ''you' + '@' + 'youremail' + '.' + 'com';document.getElementById('cloak80e8eace320bb1b97f99c988d200306f').innerHTML += '<a ' + path + '\'' + prefix + ':' + addy80e8eace320bb1b97f99c988d200306f + '\'>'+addy_text80e8eace320bb1b97f99c988d200306f+'<\/a>'; </script>', $headers); // Определитесь как реагировать на ошибки (на стороне пользователя) // Либо это сообщение об ошибке, или завершить работу скрипта ... // Этот код прекращает работу скрипта, если ошибка была более чем просто уведомление. if ( ($number !== E_NOTICE) && ($number < 2048) ) { die("Произошла ошибка. Попробуйте зайти позже"); } } // Мы должны использовать нашу пользовательскую функцию для обработки ошибок. set_error_handler('nettuts_error_handler'); // Trigger an error... (var doesn't exist) echo $somevarthatdoesnotexist;
Источник: https://net.tutsplus.com/tutorials/php/quick-tip-email-error-logs-to-yourself-with-php/
Если вы работаете с визуальными редакторами, то, я думаю, вы уже имели множество проблем при вставке текста напрямую из Microsoft 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 }
Источник: https://tim.mackey.ie/CommentView,guid,2ece42de-a334-4fd0-8f94-53c6602d5718.aspx
Если вы выкладываете ваши собственные изображения на веб-сайтах, то есть вероятность, что вы не захотите видеть их везде в интернете на следующий день. Для предотвращения кражи изображений необходимо заявить о себе как создателе изображений, и добавление водяных знаков на них, как правило, хорошая идея. Эта функция позволяет автоматически добавлять водяные знаки на ваши изображения.
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);
Источник: https://www.phpjabbers.com/put-watermark-on-images-using-php-php20.html
Следующий код ищет адреса электронной почты в строке, и заменяет их на ссылку mailto. Довольно полезно на приватных приложений, но из-за спамеров я не рекомендую использовать это на сайте, в блоге или на форуме.
$stringa = "This should format my email address <span id="cloakdb1348ee3bd7f41b78f7c17140d8bf22">Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.</span><script type='text/javascript'> document.getElementById('cloakdb1348ee3bd7f41b78f7c17140d8bf22').innerHTML = ''; var prefix = 'ma' + 'il' + 'to'; var path = 'hr' + 'ef' + '='; var addydb1348ee3bd7f41b78f7c17140d8bf22 = 'example' + '@'; addydb1348ee3bd7f41b78f7c17140d8bf22 = addydb1348ee3bd7f41b78f7c17140d8bf22 + 'domain' + '.' + 'com'; var addy_textdb1348ee3bd7f41b78f7c17140d8bf22 = 'example' + '@' + 'domain' + '.' + 'com';document.getElementById('cloakdb1348ee3bd7f41b78f7c17140d8bf22').innerHTML += '<a ' + path + '\'' + prefix + ':' + addydb1348ee3bd7f41b78f7c17140d8bf22 + '\'>'+addy_textdb1348ee3bd7f41b78f7c17140d8bf22+'<\/a>'; </script>"; $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);
Источник: https://css-tricks.com/snippets/php/automatic-mailto-links/
Новый комментарий