Каждый веб-разработчик должен хранить полезные фрагменты кода в личной библиотеке для дальнейшего использования. Сегодня я покажу вам 10 самых полезных фрагментов и функций, которые я добавил в свою библиотеку фрагментов за последние 3 месяца.
Очистить входные данные базы данных
Вставляя данные в базу данных, вы должны быть очень осторожны с SQL-инъекциями и другими попытками вставить вредоносные данные в базу данных. Приведенная ниже функция, вероятно, является наиболее полным и эффективным способом очистки строки перед ее использованием в базе данных.
function cleanInput($input) { $search = array( '@<script[^>]*?>.*?</script>@si', // Strip out javascript '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags '@<style[^>]*?>.*?</style>@siU', // Strip style tags properly '@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments ); $output = preg_replace($search, '', $input); return $output; } ?> <?php 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; }
Вот несколько примеров использования:
<?php $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); ?>
Источник: http://css-tricks.com/snippets/php/sanitize-database-inputs/
Рассчитать расстояние между двумя точками
Хотите иметь возможность рассчитать расстояние между двумя точками? Приведенная ниже функция использует широту и долготу двух мест и вычисляет расстояние между ними как в милях, так и в метрических единицах.
function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) { $theta = $longitude1 - $longitude2; $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); $miles = acos($miles); $miles = rad2deg($miles); $miles = $miles * 60 * 1.1515; $feet = $miles * 5280; $yards = $feet / 3; $kilometers = $miles * 1.609344; $meters = $kilometers * 1000; return compact('miles','feet','yards','kilometers','meters'); }
Пример:
$point1 = array('lat' => 40.770623, 'long' => -73.964367); $point2 = array('lat' => 40.758224, 'long' => -73.917404); $distance = getDistanceBetweenPointsNew($point1['lat'], $point1['long'], $point2['lat'], $point2['long']); foreach ($distance as $unit => $value) { echo $unit.': '.number_format($value,4).'<br />'; }
Источник: http://www.inkplant.com/code/calculate-the-distance-between-two-points.php
Получить все твиты определенного хэштега
Вот быстрый и простой способ получить все твиты определенного использования, используя полезную библиотеку cURL. В следующем примере будут получены все твиты с хэштегом #cat .
function getTweets($hash_tag) { $url = 'http://search.twitter.com/search.atom?q='.urlencode($hash_tag) ; echo "<p>Connecting to <strong>$url</strong> ...</p>"; $ch = curl_init($url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE); $xml = curl_exec ($ch); curl_close ($ch); //If you want to see the response from Twitter, uncomment this next part out: //echo "<p>Response:</p>"; //echo "<pre>".htmlspecialchars($xml)."</pre>"; $affected = 0; $twelement = new SimpleXMLElement($xml); foreach ($twelement->entry as $entry) { $text = trim($entry->title); $author = trim($entry->author->name); $time = strtotime($entry->published); $id = $entry->id; echo "<p>Tweet from ".$author.": <strong>".$text."</strong> <em>Posted ".date('n/j/y g:i a',$time)."</em></p>"; } return true ; } getTweets('#cats');
Source: http://www.inkplant.com/code/get-twitter-posts-by-hashtag.php
Applying Even/Odd Classes
When generating lists or tables using php, it is super useful to apply even/odd classes to each row of data in order to simplify CSS styling.
Used inside a loop, class names would be named .example-class0
and .example-class1
alternating. Increasing the “2″ number allows you to increment in thirds or fourths or whatever you need:
<div class="example-class<?php echo ($xyz++%2); ?>">
Source: http://css-tricks.com/snippets/php/applying-evenodd-classes/
Email error logs to yourself
Instead of publicly displaying possible errors on your website, why not using a custom error handler to email error logs to yourself? Here’s a handy code snippet to do it.
<?php // Our custom error handler 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' . "\r\n"; // Email the error to someone... error_log($email, 1, '[email protected]', $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;
Source: http://net.tutsplus.com/tutorials/php/quick-tip-email-error-logs-to-yourself-with-php/
Automatically creates variables with the same name as the key in the POST array
This snippet is very helpful for every POST processing. All you need is an array with expected keys in the POST array. This snippet automatically creates variables with the same name as the key in the POST array. If the key is not found in the POST array the variable is set to NULL. Basically you dont need to write:
$username=$_POST["username"]; $age=$_POST["age"]; etc.
This snippet will do this boring part of every PHP code with POST handling so you can fully focus on a validation of the input, because that is much more important.
<?php $expected=array('username','age','city','street'); foreach($expected as $key){ if(!empty($_POST[$key])){ ${key}=$_POST[$key]; } else{ ${key}=NULL; } } ?>
Source: http://www.catswhocode.com/blog/snippets/automatically-creates-variables…
Download & save a remote image on your server using PHP
Here’s a super easy and efficient way to download a remote image and save it on your own server.
$image = file_get_contents('http://www.url.com/image.jpg'); file_put_contents('/images/image.jpg', $image); //save the image on your server
Source: http://www.catswhocode.com/blog/snippets/download-save-a-remote-image…
Create data uri’s
Data uri’s can be useful for embedding images into HTML/CSS/JS to save on HTTP requests, at the cost of maintainability. You can use online tools to create data uri’s, or you can use the simple PHP function below:
function data_uri($file, $mime) { $contents=file_get_contents($file); $base64=base64_encode($contents); echo "data:$mime;base64,$base64"; }
Source: http://css-tricks.com/snippets/php/create-data-uris/
Detect browser language
When developing a multilingual website, I really like to retrieve the browser language and use this language as the default language for my website. Here’s how I get the language used by the client browser:
function get_client_language($availableLanguages, $default='en'){ if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $langs=explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); foreach ($langs as $value){ $choice=substr($value,0,2); if(in_array($choice, $availableLanguages)){ return $choice; } } } return $default; }
Source: http://snipplr.com/view/12631/detect-browser-language/php-detect-browser-language
Add (th, st, nd, rd, th) to the end of a number
This simple and easy function will take a number and add “th, st, nd, rd, th” after it. Very useful!
function ordinal($cdnl){ $test_c = abs($cdnl) % 10; $ext = ((abs($cdnl) %100 < 21 && abs($cdnl) %100 > 4) ? 'th' : (($test_c < 4) ? ($test_c < 3) ? ($test_c < 2) ? ($test_c < 1) ? 'th' : 'st' : 'nd' : 'rd' : 'th')); return $cdnl.$ext; } for($i=1;$i<100;$i++){ echo ordinal($i).'<br>'; }
Source: http://phpsnips.com/snip-37