网站改版、新增功能时保持URL稳定很重要

现在这个博客看了下记录,大概是从13年开始创建的,一直用的wordpress,模板也是官方默认的,没有做PHP上面的修改
有升级就升级,4年多过去了,查看google webmaster tools里面的crawl errors,基本上没什么报错,就2-3个页面
报404错误。URL非常稳定,WordPress处理的比较好,要么301,要么200,只要在历史上有确实生成过的URL就一定不会是
404错误,这对于页面收录很关键。

这让我想起了PHP兼容,PHP一路升级以来,基本上都是像前兼容的,很久前版本的PHP只需要稍稍改动一下,立马就能跑,这
个关键点应该是让PHP能流行的一个重要原因之一。

反观我之前买来的IndoMeme,买来之后立马就开始做手术,大改后台PHP架构,google webmaster tools那里报4000多个URL
找不到,犯了该错误。后来还有个美女图片站,也是,不过我在逐渐改进中。

希望,在未来,每一次改版、新增网站功能时,做好一个sitemap的页面,只要是历史上确实生成过得URL,要么301,要么200。

    //旧ULR,不再网站上链接到,但是不能删代码,否则就是404错误.
    //同时类似这样的翻页数据也不能再增加/category/meme/page/10
    //假设2017年09月29日15:28:31改版了,那么/category/meme/page/11...N不能再出现
    //或者改旧的URL 301到新的,但是如果是结构改变,那么不建议301
    /*
      /index/meme/index
      /category/meme
      /category/meme/page/1
 
      /index/gif/index
      /category/gif
      /category/gif/page/1
 
      /category/video
      /index/video/index
      /category/video/page/1
    */

在Mac上使用ssh-key免密码登录服务器

转载自:在Mac上使用ssh-key免密码登录服务器
ssh key 登录。(使用账户密码登录,看这篇)

先生成公钥和私钥,在 Mac OSX 终端(或 iTerm 2 等)中进入 ~/.ssh 目录,输入:

$ ssh-keygen -t rsa

会询问一些问题,直接全部回车,即可在 ~/.ssh 目录中生成 id_rsa(私钥) 和 id_rsa.pub(公钥)文件。我们需要将公钥上传到 testhost 服务器的 ~/.ssh 目录下面,因为第二种方式中我们已经配置了 testhost 服务器,scp 也能识别这个服务器,所以,可以使用如下命令将文件传输到 testhost 服务器中:

$ scp ~/.ssh/id_rsa.pub testhost:~/.ssh/

接下来,用第二种方式登录到 testhost 服务器中,在 ~/.ssh 目录中使用以下命令将 id_rsa.pub 更名为 authorized_keys:

foo@testhost: $ mv id_rsa.pub authorized_keys

最后确保下文件权限正常:

foo@testhost: $ chmod 700 ~/.ssh/
foo@testhost: $ chmod 600 ~/.ssh/authorized_keys

现在,我们可以在 Mac OSX 的终端中使用 ssh testhost 登录到 testhost 服务器了,无需输入密码,更无需记忆服务器参数。

如果无法连接,请在服务器的 /etc/ssh/sshd_config 文件中查看 PubkeyAuthentication 的值是否为 yes,如果不是,请修改为 yes ,并使用以下命令重启 ssh 服务:

foo@testhost: $ /etc/init.d/ssh restart

如果需要禁止密码登录,同样可以编辑 /etc/ssh/sshd_config 文件中 PasswordAuthentication 的值为 no 并重启 ssh 服务。

最后在终端执行 shh root@1.2.3.4进行登录 ,1.2.3.4为服务器IP

天下技术,唯快不破

现在做网站越来越有体会,我们擅长的技术优势一定要发挥到极致。那么在通信速度上要做到秒杀其他的竞争对手,我们才能胜出!

看看《淘宝技术这十年》,他们是怎么做到速度上秒杀其它对手的。
看看微信的发展史,看看他们是怎么在即时通信的速度上,刚开始2个月就秒杀对手米聊的。
再看看谷歌、百度,对速度上的要求是苛刻再苛刻,不允许一丝丝马虎。即使现在社会已经普及4G网络,但你看看还有很多使用着长城宽带、2G网站,如果能搞定这些人,那么搞定那些使用高速的电信宽带的用户就小CASE。

看谷歌收购公司都只收购那些通信速度快的公司
QQ图片20151001215238

主从数据库的IP地址更换时,用到的自动替换功能

主从数据库的IP地址更换时,用到的自动替换功能
这也是工作中遇到的,自己想办法做的自动替换功能,节约很多的时间,办公中能自动的东西就尽量去自动化,节约时间,提高效率。

<!--?php 
/*
 * 在文件配置中大多数的数据库链接定义的格式是define("TEST_MASTER_DB_HOST", "192.168.1.1"); 现在要替换成define("TEST_MASTER_DB_HOST", "192.168.1.10");
 * 该PHP代码就是用来自动替换Ip地址
 */
$dbNameArr      =    array("testDb",'newDb');
$prefixArr[]    =    array('_MASTER_','_SLAVE_');
$dirPath        =    'D:/wamp/www/test/';
$pathArr        =    array();
$replaceArr     =    array();
// replace start ====================================================================
foreach ($prefixArr[0] as $v)
{
    foreach ($dbNameArr as $val)
    {
        $dbNameUp        =    strtoupper($val);
        $val1            =    'define("'.$dbNameUp.$v.'DB_HOST", "192.168.65.1");';
        $val2            =    'define("'.$dbNameUp.$v.'DB_HOST", "192.168.65.2");';
        $val3            =    'define("'.$dbNameUp.$v.'DB_HOST", "192.168.85.3");';
        $replaceArr[]    =    array($val1,$val3);
        $replaceArr[]    =    array($val2,$val3);
    }
}
foreach ($prefixArr[1] as $v)
{
    foreach ($dbNameArr as $val)
    {
        $dbNameUp        =    strtoupper($val);
        $val1            =    'define("'.$dbNameUp.$v.'DB_HOST", "192.168.65.10");';
        $val2            =    'define("'.$dbNameUp.$v.'DB_HOST", "192.168.65.20");';
        $val3            =    'define("'.$dbNameUp.$v.'DB_HOST", "192.168.85.30");';
        $replaceArr[]    =    array($val1,$val3);
        $replaceArr[]    =    array($val2,$val3);
    }
}
$pathArr    =    file_list($dirPath);
//print_r($pathArr);exit;
 
foreach ($pathArr as $filePath)
{
    replace($filePath,$replaceArr);
}
// replace end ====================================================================
 
function replace($filePath,$replaceArr)
{
    $oldData    =    file_get_contents($filePath);
    foreach ($replaceArr as $v)
    {
        $oldData    =    str_replace($v[0],$v[1],$oldData);
    }
    file_put_contents($filePath,$oldData);
}
function file_list($path)
{
    global $pathArr;
    if ($handle = opendir($path))
    {
        while (false !== ($file = readdir($handle)))
        {
            if ($file != "." &amp;&amp; $file != "..")
            {
                //echo $path.": ".$file."&lt;br&gt;";
                if (is_dir($path."/".$file))
                {
                    file_list($path."/".$file);
                }
                else
                {
                    $pathArr[]    = $path."/".$file;
                }
            }
        }
    }
    return $pathArr;
}
?-->

硬着头皮开始学codeigniter

官方推荐了一个stblog,慢慢开始看把

update time 2011-12-18 08:24:42

开始写这个标题的时间是2011年12月11日,现在是2011年12月18日,整整过了7天,我根本就没有心思静下心来去看别人写的代码,这让我自己太失望了。

公司的那些个项目想要整一个ci框架去开发不太现实,因为大家都不用,所以最好的方案就是自己写一个基于MVC模式的公司框架。

之前写了好几个网站,说实话,代码的东西,我感觉扩展性能实在是太差。代码的实现过程完全是我自己想怎么写就怎么写,没能够有一个规范性的东西去约束。

用现成的php框架去开发东西的公司很少,如果要用,那么必定是自己改装过的或者完全就是自己写的,为公司定制的。

再说回stblog,我昨晚看了它的源代码,很多地方的代码量确实不少,但结构算是很清晰了,非常想弄懂。

完全看不懂,非常郁闷,但又不相信自己很差,希望自己能够愈战愈勇。

//查
$query = $this->db->query("要执行的 SQL");
$query = $this->db->query("要执行的 SQL");
foreach ($query->result_array() as $row)
{
  echo $row['title'];
  echo $row['name'];
  echo $row['body'];
}
 
//插
$data = array(
               'title' => 'My title' ,
               'name' => 'My Name' ,
               'date' => 'My date'
            );
$this->db->insert('mytable', $data); 
//改
$data = array(
  'title' => $title,
  'name' => $name,
  'date' => $date
);
$this->db->update('mytable', $data, "id = 4");
//删
$this->db->delete('mytable', "id = 4"); 
/*
开启缓存后可以使用$this->db->cache_delete_all()删除缓存
数据库事务处理
CI的session是存储在cookie中的
设置session
*/
$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );
    $this->session->set_userdata($newdata);
//删除session
$newdata = array(
  'username'  => 'johndoe',
  'email'     => 'johndoe@some-site.com',
  'logged_in' => TRUE
  );
$this->session->set_userdata($newdata);