什么是404页面
PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义。 以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义: function array_sort($arr,$keys,$type='asc'){ $keysvalue = $new_array = array(); foreach ($arr as $k=>$v){ $keysvalue[$k] = $v[$keys]; } if($type == 'asc'){ asort($keysvalue); }else{ arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $k=>$v){ $new_array[$k] = $arr[$k]; } return $new_array; }
NginxCodeReview :
比如说我们有域名example.com,然后配置我们的Nginx服务器,希望绑定两个域名不带www的example.com以及www.example.com。绑定域名可以在你的Nginx配置文件的server {}节做下述配置。 server { listen 80; server_name example.com www.example.com; }
使用PHP完成SVN的操作,包括复制,查看列表,删除,移动,创建目录,查看diff,更新,合并,提交,获取状态,获取commit log,获取当前版本号操作 。 <?php /** * * This class for execute the external program of svn * * @auth Seven Yang <qineer@gmail.com> * */ class SvnPeer { /** * List directory entries in the repository * * @param string a specific project repository path * @return bool true, if validated successfully, otherwise false */ static public function ls($repository) { $command = "svn ls " . $repository; $output = SvnPeer::runCmd($command); $output = implode("<br>", $output); if (strpos($output, 'non-existent in that revision')) { return false; } return "<br>" . $command . "<br>" . $output; } /** * Duplicate something in working copy or repository, remembering history * * @param $src * @param $dst * @param $comment string specify log message * @return bool true, if copy successfully, otherwise return the error message * * @todo comment need addslashes for svn commit */ static public function copy($src, $dst, $comment) { $command = "svn cp $src $dst -m '$comment'"; $output = SvnPeer::runCmd($command); $output = implode("<br>", $output); if (strpos($output, 'Committed revision')) { return true; } return "<br>" . $command . "<br>" . $output; } /** * Remove files and directories from version control * * @param $url * @return bool true, if delete successfully, otherwise return the error message * * @todo comment need addslashes for svn commit */ static public function delete($url, $comment) { $command = "svn del $url -m '$comment'"; $output = SvnPeer::runCmd($command); $output = implode('<br>', $output); if (strpos($output, 'Committed revision')) { return true; } return "<br>" . $command . "<br>" . $output; } /** * Move and/or rename something in working copy or repository * * @param $src string trunk path * @param $dst string new branch path * @param $comment string specify log message * @return bool true, if move successfully, otherwise return the error message * * @todo comment need addslashes for svn commit */ static public function move($src, $dst, $comment) { $command = "svn mv $src $dst -m '$comment'"; $output = SvnPeer::runCmd($command); $output = implode('<br>', $output); if (strpos($output, 'Committed revision')) { return true; } return "<br>" . $command . "<br>" . $output; } /** * Create a new directory under version control * * @param $url string * @param $comment string the svn message * @return bool true, if create successfully, otherwise return the error message * * @todo comment need addslashes for svn commit */ static public function mkdir($url, $comment) { $command = "svn mkdir $url -m '$comment'"; $output = SvnPeer::runCmd($command); $output = implode('<br>', $output); if (strpos($output, 'Committed revision')) { return true; } return "<br>" . $command . "<br>" . $output; } static public function diff($pathA, $pathB) { $output = SvnPeer::runCmd("svn diff $pathA $pathB"); return implode('<br>', $output); } static public function checkout($url, $dir) { $command = "cd $dir && svn co $url"; $output = SvnPeer::runCmd($command); $output = implode('<br>', $output); if (strstr($output, 'Checked out revision')) { return true; } return "<br>" . $command . "<br>" . $output; } static public function update($path) { $command = "cd $path && svn up"; $output = SvnPeer::runCmd($command); $output = implode('<br>', $output); preg_match_all("/[0-9]+/", $output, $ret); if (!$ret[0][0]){ return "<br>" . $command . "<br>" . $output; } return $ret[0][0]; } static public function merge($revision, $url, $dir) { $command = "cd $dir && svn merge -r1:$revision $url"; $output = implode('<br>', SvnPeer::runCmd($command)); if (strstr($output, 'Text conflicts')) { return 'Command: ' . $command .'<br>'. $output; } return true; } static public function commit($dir, $comment) { $command = "cd $dir && svn commit -m'$comment'"; $output = implode('<br>', SvnPeer::runCmd($command)); if (strpos($output, 'Committed revision') || empty($output)) { return true; } return $output; } static public function getStatus($dir) { $command = "cd $dir && svn st"; return SvnPeer::runCmd($command); } static public function hasConflict($dir) { $output = SvnPeer::getStatus($dir); foreach ($output as $line){ if ('C' == substr(trim($line), 0, 1) || ('!' == substr(trim($line), 0, 1))){ return true; } } return false; } /** * Show the log messages for a set of path with XML * * @param path string * @return log message string */ static public function getLog($path) { $command = "svn log $path --xml"; $output = SvnPeer::runCmd($command); return implode('', $output); } static public function getPathRevision($path) { $command = "svn info $path --xml"; $output = SvnPeer::runCmd($command); $string = implode('', $output); $xml = new SimpleXMLElement($string); foreach ($xml->entry[0]->attributes() as $key=>$value){ if ('revision' == $key) { return $value; } } } static public function getHeadRevision($path) { $command = "cd $path && svn up"; $output = SvnPeer::runCmd($command); $output = implode('<br>', $output); preg_match_all("/[0-9]+/", $output, $ret); if (!$ret[0][0]){ return "<br>" . $command . "<br>" . $output; } return $ret[0][0]; } /** * Run a cmd and return result * * @param string command line * @param boolen true need add the svn authentication * @return array the contents of the output that svn execute */ static protected function runCmd($command) { $authCommand = ' --username ' . SVN_USERNAME . ' --password ' . SVN_PASSWORD . ' --no-auth-cache --non-interactive --config-dir '.SVN_CONFIG_DIR.'.subversion'; exec($command . $authCommand . " 2>&1", $output); return $output; } }
用到此功能最多的可能就是比较火的微博和评论系统。现有两种实现方法。 1、函数实现 <?php function format_date($time){ $t=time()-$time; $f=array( '31536000'=>'年', '2592000'=>'个月', '604800'=>'星期', '86400'=>'天', '3600'=>'小时', '60'=>'分钟', '1'=>'秒' ); foreach ($f as $k=>$v) { if (0 !=$c=floor($t/(int)$k)) { return $c.$v.'前'; } } } ?>
主从服务器表类型的选择 一般的共识是主服务器使用innodb,事务,行锁等功能是myisam所没有的,对修改操作而言,它更高效;从服务器使用myisam,全文检索功能是innodb所没有的,对查询操作而言,它更高效。这样就可以各尽其能。 呵呵,主从库各司其职,主库:最快的速度做添加删除修改操作,从库,最快的速度做查询操作
下载代码 jquery-auto-iframe-height 或者 下载
生活中每个人都在不停地奔波与忙碌,每天穿梭在人海和时间的洪流中,甚至都不记得经历过什么,只是在机械地过日子,日子过了一天又一天,当有一天闲下来回首的时候突然发现有些空虚,以至于都不知道自己在忙些什么……
PHP的CURL做模拟登录时,之后可发帖或获取需要的内容时非常有用,以下是一段curl的代码。 <?php define ( 'IS_PROXY', true ); //是否启用代理 /* cookie文件 */ $cookie_file = dirname ( __FILE__ ) . "/cookie_" . md5 ( basename ( __FILE__ ) ) . ".txt"; // 设置Cookie文件保存路径及文件名 /*模拟浏览器*/ $user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)"; function vlogin($url, $data) { // 模拟登录获取Cookie函数 $curl = curl_init (); // 启动一个CURL会话 if (IS_PROXY) { //以下代码设置代理服务器 //代理服务器地址 curl_setopt ( $curl, CURLOPT_PROXY, $GLOBALS ['proxy'] ); } curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址 curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); // 对认证证书来源的检查 curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 1 ); // 从证书中检查SSL加密算法是否存在 curl_setopt ( $curl, CURLOPT_USERAGENT, $GLOBALS ['user_agent'] ); // 模拟用户使用的浏览器 @curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自动跳转 curl_setopt ( $curl, CURLOPT_AUTOREFERER, 1 ); // 自动设置Referer curl_setopt ( $curl, CURLOPT_POST, 1 ); // 发送一个常规的Post请求 curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data ); // Post提交的数据包 curl_setopt ( $curl, CURLOPT_COOKIEJAR, $GLOBALS ['cookie_file'] ); // 存放Cookie信息的文件名称 curl_setopt ( $curl, CURLOPT_COOKIEFILE, $GLOBALS ['cookie_file'] ); // 读取上面所储存的Cookie信息 curl_setopt ( $curl, CURLOPT_TIMEOUT, 30 ); // 设置超时限制防止死循环 curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 显示返回的Header区域内容 curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回 $tmpInfo = curl_exec ( $curl ); // 执行操作 if (curl_errno ( $curl )) { echo 'Errno' . curl_error ( $curl ); } curl_close ( $curl ); // 关闭CURL会话 return $tmpInfo; // 返回数据 } function vget($url) { // 模拟获取内容函数 $curl = curl_init (); // 启动一个CURL会话 if (IS_PROXY) { //以下代码设置代理服务器 //代理服务器地址 curl_setopt ( $curl, CURLOPT_PROXY, $GLOBALS ['proxy'] ); } curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址 curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); // 对认证证书来源的检查 curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 1 ); // 从证书中检查SSL加密算法是否存在 curl_setopt ( $curl, CURLOPT_USERAGENT, $GLOBALS ['user_agent'] ); // 模拟用户使用的浏览器 @curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自动跳转 curl_setopt ( $curl, CURLOPT_AUTOREFERER, 1 ); // 自动设置Referer curl_setopt ( $curl, CURLOPT_HTTPGET, 1 ); // 发送一个常规的Post请求 curl_setopt ( $curl, CURLOPT_COOKIEFILE, $GLOBALS ['cookie_file'] ); // 读取上面所储存的Cookie信息 curl_setopt ( $curl, CURLOPT_TIMEOUT, 120 ); // 设置超时限制防止死循环 curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 显示返回的Header区域内容 curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回 $tmpInfo = curl_exec ( $curl ); // 执行操作 if (curl_errno ( $curl )) { echo 'Errno' . curl_error ( $curl ); } curl_close ( $curl ); // 关闭CURL会话 return $tmpInfo; // 返回数据 } function vpost($url, $data) { // 模拟提交数据函数 $curl = curl_init (); // 启动一个CURL会话 if (IS_PROXY) { //以下代码设置代理服务器 //代理服务器地址 curl_setopt ( $curl, CURLOPT_PROXY, $GLOBALS ['proxy'] ); } curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址 curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); // 对认证证书来源的检查 curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 1 ); // 从证书中检查SSL加密算法是否存在 curl_setopt ( $curl, CURLOPT_USERAGENT, $GLOBALS ['user_agent'] ); // 模拟用户使用的浏览器 @curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自动跳转 curl_setopt ( $curl, CURLOPT_AUTOREFERER, 1 ); // 自动设置Referer curl_setopt ( $curl, CURLOPT_POST, 1 ); // 发送一个常规的Post请求 curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data ); // Post提交的数据包 curl_setopt ( $curl, CURLOPT_COOKIEFILE, $GLOBALS ['cookie_file'] ); // 读取上面所储存的Cookie信息 curl_setopt ( $curl, CURLOPT_TIMEOUT, 120 ); // 设置超时限制防止死循环 curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 显示返回的Header区域内容 curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回 $tmpInfo = curl_exec ( $curl ); // 执行操作 if (curl_errno ( $curl )) { echo 'Errno' . curl_error ( $curl ); } curl_close ( $curl ); // 关键CURL会话 return $tmpInfo; // 返回数据 } function delcookie($cookie_file) { // 删除Cookie函数 unlink ( $cookie_file ); // 执行删除 } ?>