Oct 12
终于让我找到一篇有用日志了


      Web 服务器执行一个脚本,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。
    而有的时候,我们更本不关心这些耗时的脚本的执行结果,但却还要等他执行完返回,才能继续下一步。    
    那么有没有什么办法,只是简单的触发调用这些耗时的脚本然后就继续下一步,让这些耗时的脚本在服务端慢慢执行?  
      
    接下来,我将使用fscokopen来实现这一功能。
    
    PHP是支持socket编程的,就是fsockopen, 在以前做CMS的时候,我也曾经用过它做过smtp发信。
    fscokopen返回一个到远程主机连接的句柄。你可以像使用fopen返回的句柄一样,对她进行写fwrite,读取fgets, fread等操作。
    
    我们的异步PHP,主要想要的效果就是,触发一个PHP脚本,然后立即返回,留它在服务器端慢慢执行。前面我也写过一篇文章讨论过这个问题。
Sep 1
<?php
/* 默认的变量 */
$webtitle='phpcto.net';
$weburl='http://www.phpcto.net';
$charset='utf-8';
/* 数据库中读取的数据 */
$data=array(
      array('title'=>'NO1',  //标题
          'link'=>'/no1.html',  //链接  
          'author'=>'yangjs',  //作者
          'date'=>'2008-08-08 10:22:30',  //发表时间
          'category'=>'分类1',  //分类
          'description'=>'这里是内容描述简介……'  //描述
          ),
      array('title'=>'NO2',
          'link'=>'/no1.html',
          'author'=>'yangjs',
          'date'=>'2008-08-08 10:22:30',
          'category'=>'分类2',
          'description'=>'这里是内容描述简介……'
          ),  
          );
header("Content-type: text/xml; charset={$charset}");
$rss = "<?xml version=\"1.0\" encoding=\"{$charset}\"?>\n";
$rss = $rss."<rss version=\"2.0\">\n";
$rss = $rss."<channel>\n";
$rss = $rss."<title><![CDATA[$webtitle]]></title>\n";
$rss = $rss."<link>$weburl</link>\n";
$rss = $rss."<description><![CDATA[yblog!执着追求!简单快乐!分享记录学习PHP的点点滴滴。]]></description>\n";
$rss = $rss."<generator>杨佳胜</generator>\n";
$rss = $rss."<managingEditor>yangjs17@yeah.net</managingEditor>\n";
$rss = $rss."<webMaster>yangjs17@yeah.net</webMaster>\n";
$rss = $rss."<language>zh-cn</language>\n";
$rss = $rss."<copyright>Copyright 2009 简单爱 Powerd By yangjs</copyright>\n";
foreach ($data as $ditem){
    $rss = $rss."<item>\n";
    $rss = $rss."<title><![CDATA[{$ditem['title']}]]></title>\n";
    $rss = $rss."<link>{$ditem['link']}</link>\n";
    $rss = $rss."<author><![CDATA[{$ditem['author']}]]></author>\n";
    $rss.="<category><![CDATA[ {$ditem['category']} ]]></category>\n";
    $rss = $rss."<pubDate>{$ditem['date']}</pubDate>\n";
    $rss = $rss."<description><![CDATA[{$ditem['description']}]]></description>\n";
    $rss = $rss."</item>\n";
}
$rss = $rss."</channel>\n";
$rss = $rss."</rss>";
echo $rss;
?>
Jul 3
function wipespecial($str){
      return str_replace(array( "\n", "\r", '..'), array('', '', ''), $str);
    }
    /**
     * @desc 验证目录是否存在,不存在则创建目录

     *
     * @param string $dir
     * @return bool
     */
      function checkDir($dir){
      if (!is_dir($dir))
      {
        $temp = explode('/',$dir);
        $cur_dir = '';
        $count=count($temp);
        for($i=0;$i<$count;$i++)
        {
          $cur_dir .= $temp[$i].'/';
          if (!is_dir($cur_dir))
          {
          @mkdir($cur_dir,0777);
          }
        }
      }
        return true;
    }
    function safe_file_get_contents($filename)
    {
        $fp = fopen($filename, 'rb');
        if ($fp) {
            flock($fp, LOCK_SH);
            clearstatcache();
            $filesize = filesize($filename);
            if ($filesize > 0) {
                $data = fread($fp, $filesize);
            } else {
                $data = false;
            }
            flock($fp, LOCK_UN);
            fclose($fp);
            return $data;
        } else {
            return false;
        }
    }
    function safe_file_put_contents($filename,$content)  {
      if(function_exists('file_put_contents')){  
        return file_put_contents($filename, $content);
      }
      $fp = fopen($filename, 'w+');
      if ($fp) {
        flock($fp, LOCK_EX);
        fwrite($fp, $content);
        flock($fp, LOCK_UN);
        fclose($fp);
        return true;
      } else {
        return false;
      }
    }
    function getp($filename){
    $l=strlen($filename);
    $last=strrpos($filename,'.');
     return strtolower(substr($filename,$last,$l));
    }
Jul 3
  /**
     * @DESC 以下3个函数 是无限级分类
     * @desc getTree($arr,$id,$parentid) $id:分类ID字段名 $parentid:父类ID字段名

     *
     */
    $function_treedata=array();
    function getTree($arr,$id='id',$parentid='parent_id',$name='cat_name'){
      global $function_treedata;
      $data=fomartData($arr,$id,$parentid,$name);    
      $function_treedata=NULL;
      return $data;
    }
    function fomartData($data,$id,$parentid,$name){  
      global $function_treedata;
      foreach($data as $v){
         $v['child'] = array();
         if($v[$parentid] == 0){  
            $i = @count($data2);  
            $data2[$i] = $v;  
            $ind[$v[$id]] =& $data2[$i];  
         }else {  
            $i = count($ind[$v[$parentid]]['child']);  
            $ind[$v[$parentid]]['child'][$i] = $v;  
            $ind[$v[$id]] =& $ind[$v[$parentid]]['child'][$i];  
        }
      }
      goToTreeData($data2,$name,$parentid);  
      return $function_treedata;
    }
    function goToTreeData($data,$name,$parentid){  
      global $function_treedata;
      foreach($data as $v){
        if($v[$parentid]==0){
          $v[$name]='*'.$v[$name].'*';
        }
        $function_treedata[]=$v;
        if(!empty($v['child'][0])){
          goToTreeData($v['child'],$name,$parentid);
        }
      }
    }
Jun 24
eg: 配置IP为127.0.1.1 虚拟域名为yjs.com 网站文件夹为E:/yjs 的虚拟主机
第一步:
打开C:\WINDOWS\system32\drivers\etc\hosts
在其中加入

127.0.1.1  yjs.com

第二步:
打开Apache目录下 conf\extra\httpd-vhosts 文件
在其中加入

<VirtualHost 127.0.1.1:80>
    DocumentRoot "E:/yjs"
    ServerName yjs.com
    ErrorLog "E:/yjs/tmp_error_log.txt"
</VirtualHost>

第三步:

打开APACHE配置文件 httpd.conf

去掉 # Include conf/extra/httpd-vhosts.conf 前面的#号
并在文件最后加上E:/yjs目录权限

<Directory "E:/yjs">
    Options Indexes FollowSymLinks MultiViews ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

第四步:
重启APACHE
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]