/**
* get current visitor's ip address
*
* @return string - ip string
*/
function getUserIp()
{
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
[/codesyntax]
2. Function to create recursive dirs [codesyntax lang="php" lines="no"] /** * create recursive dirs by given path * * @param string $path - /home/kim/path1/path2/path3 * @return void|true */ function createDirs($path) { if (!is_dir($path)) { if (createDirs(dirname($path))) { mkdir($path, 0777); return true; } } else { return true; } } [/codesyntax]
3. Function that save remote files(photos) to local [codesyntax lang="php" lines="no"] /** * save photo from remote to local * * @param string $img - the remote url, for example http://aff.bstatic.com/images/hotel/max300/532/5329930.jpg * @param string $targetPath - lcoal path, for example /home/kim/photo/max300/532/5329930.jpg * @return boolean - return false when no overwrite, return true when download successfully */ function saveImage($img, $targetPath, $forceRefresh = true) { if (file_exists($targetPath) and !$forceRefresh) { return false; } $ch = curl_init($img); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); $rawdata = curl_exec($ch); curl_close($ch); if (file_exists($targetPath)) { unlink($targetPath); } if ($fp = @fopen($targetPath, 'x')) { fwrite($fp, $rawdata); fclose($fp); } return true; } [/codesyntax]
4. Transform array to sql binds: [codesyntax lang="php" lines="no"] /** * transform array to sql binds * * @example * $bind = array('value_1', 'value_2', 'value_3'); * $sql = "DELETE FROM content WHERE cid IN (" . arrayToBinds($bind) . ")"; * * @param mixed $data * @return string */ function arrayToBinds($data) { if (!is_array($data)) { return "'" . (string)$data . "'"; } else { $count = count($data); $return = ''; for ($i = 0; $i < $count; $i++) { $return .= "'" . $data[$i] . "'"; if ($i != $count - 1) { $return .= ', '; } } return $return; } } [/codesyntax]
5. List dirs tree - 1 [codesyntax lang="php" lines="no"] function listTree($dir) { if (!$dirHandler = @dir($dir)) { return; } while (false !== ($object = $dirHandler->read())) { if ($object == '.' || $object == '..') { continue; } $file = $dir . DIRECTORY_SEPARATOR . $object; if (is_dir($file)) { listTree($file); } else if (is_file($file)) { echo $file . ''; } } $dirHandler->close(); } [/codesyntax]
6. List dirs tree - 2 [codesyntax lang="php" lines="no"] function listTree($dir) { if (!$dirHandler = @opendir($dir)) { return; } while (false !== ($object = readdir($dirHandler))) { if ($object == '.' || $object == '..') { continue; } $file = $dir . DIRECTORY_SEPARATOR . $object; if (is_dir($file)) { listTree($file); } else if (is_file($file)) { echo $file . ''; } } closedir($dirHandler); } [/codesyntax]
7. Safe encoding for utf-8 [codesyntax lang="php" lines="no"] /** * safe encoding to utf-8, especially for chinese * * @param string $string * @param string $outEncoding * @return unknown|string */ function safeEncoding($string, $outEncoding = 'UTF-8') { $encoding = "UTF-8"; for ($i = 0; $i < strlen($string); $i++) { if (ord($string{$i}) < 128) continue; if ((ord($string{$i}) & 224) == 224) { // 第一个字节判断通过 $char = $string{++$i}; if ((ord($char) & 128) == 128) { // 第二个字节判断通过 $char = $string{++$i}; if ((ord($char) & 128) == 128) { $encoding = "UTF-8"; break; } } } if ((ord($string{$i}) & 192) == 192) { //第一个字节判断通过 $char = $string{++$i}; if ((ord($char)&128) == 128) { // 第二个字节判断通过 $encoding = "GB2312"; break; } } } if (strtoupper($encoding) == strtoupper($outEncoding)) { return $string; } else { //return iconv($encoding,$outEncoding,$string); return mb_convert_encoding($string,$outEncoding, $encoding); } } [/codesyntax]
8. Get http request headers [codesyntax lang="php" lines="no"] /** * @return array */ function getHeaders() { $headers = array(); foreach ($_SERVER as $k => $v) { if (substr($k, 0, 5) == "HTTP_") { $k = str_replace('_', ' ', substr($k, 5)); $k = str_replace(' ', '-', ucwords(strtolower($k))); $headers[$k] = $v; } } return $headers; } [/codesyntax]
9. Check if ip match the CIDR(array) [codesyntax lang="php" lines="no"] /** * check if the ip within the cidr(array) * * @param string $ip - example: 218.206.78.45 * @param array|string $cidr - example: $chinamobilenet = array( '112.0.0.0/10', '117.128.0.0/10', '120.192.0.0/10', '211.103.0.0/17', '211.136.0.0/14', '211.140.0.0/15', '211.142.0.0/17', '211.143.0.0/16', '218.200.0.0/14', '218.206.0.0/15', '221.130.0.0/15', '221.176.0.0/13', ); * @return bool */ function matchCIDR($ip, $cidr) { $output = false; if (is_array($cidr)) { foreach ($cidr as $cidrlet) { if (matchCIDR($ip, $cidrlet)) { $output = true; } } } else { list($net, $mask) = explode('/', $cidr); $ip_b_string = sprintf("%032b", ip2long($ip)); $net_b_string = sprintf("%032b", ip2long($net)); $result = substr_compare($ip_b_string, $net_b_string, 0, $mask); $output = ($result === 0); } return $output; } [/codesyntax]
10. Standard I/O example [codesyntax lang="php" lines="no"] /** * standard I/O * * @example * /usr/bin/php t.php string1 * * @return void - output trimed input */ if (isset($argv[1])) { $output = trim($argv[1]); fwrite(STDOUT, $output); fclose(STDOUT); } [/codesyntax]