分类: 开发编程

  • SSH认证免密码登录

    客户端:

    #ssh-keygen -t rsa

    Generating public/private rsa key pair.

    Enter file in which to save the key (/Users/hisway/.ssh/id_rsa):

    Enter passphrase (empty for no passphrase):

    Enter same passphrase again:

    Your identification has been saved in /Users/hisway/.ssh/id_rsa.

    Your public key has been saved in /Users/hisway/.ssh/id_rsa.pub.

    The key fingerprint is:

    0d:24:c6:8d:f0:d9:b2:01:08:67:89:8a:5f:20:8e:b7 hisway@hisway.lan

    The key’s randomart image is:

    +–[ RSA 2048]—-+

    |.ooooooo.        |

    |oo+  +o=.        |

    |=. .  = o        |

    |+.. .  + o       |

    | o o  . S .      |

    |  E              |

    |                 |

    |                 |

    |                 |

    +—————–+

    #scp /Users/hisway/.ssh/id_rsa.pub  root@162.243.*.*:/home/root/id_rsa.pub

    服务端:

    #cat id_rsa.pub >>/root/.ssh/authorized_keys

    # vi /etc/ssh/sshd_config

    RSAAuthentication yes

    #RSA认证

    PubkeyAuthentication yes

    #开启公钥验证

    AuthorizedKeysFile    .ssh/authorized_keys

    #验证文件路径

    PasswordAuthentication no

    #禁止密码认证

    PermitEmptyPasswords no

    #禁止空密码

    UsePAM no

    #禁用PAM

    最后保存,重启

    #

    service sshd restart

     

  • 在 Ubuntu 中安装 Laravel

    安装 Composer

    curl -sS https://getcomposer.org/installer | php 

    下载完成之后将它放在系统 PATH 中,供全局调用。

    mv composer.phar /usr/local/bin/composer

    安装 Larave

    composer create-project laravel/laravel /home/wwwroot/laravel/

    执行下面的命令来授予 storage 文件夹的读写操作权限

    chgrp -R www /home/wwwroot/laravel/

    chmod -R 775 /home/wwwroot/laravel/app/storage

    建立网站域名指向/home/wwwroot/laravel/public(略)

    输入域名若提示:

    open_basedir restriction in effect. File() is not within the allowed path(s):XXX

    open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是当前网站根目录的路径。

    在Apache的httpd.conf中VirtualHost的相应设置方法: 

    php_admin_value open_basedir “/home/wwwroot/laravel:/home/wwwroot/laravel/public:/tmp/:/var/tmp/:/proc/“

    重启apache解决

  • Namecheap买的PositiveSSL证书的激活使用

    网购星期一剁手的六块钱ssl证书一直放着没动,今天有空去激活了,给9块钱的curl.xyz域名加上了https,囧~
    PositiveSSL认证是Comodo的入门级产品,PositiveSSL只对你的域名所有权进行认证,PositiveSSL已经被几乎所有流行的浏览器支持,只要你的PositiveSSL认证正常,用浏览器打开你提供的https网页就像普通的http网页一样,浏览器不会弹出安全警告。
    ox01 
    在帐户的ssl列表中选择未曾使用过的SSL认证服务,点击右边的Active链接,开始申请激活你的SSL认证,接下来我们要发送一个认证签名请求文件给namecheap来完成激活过程,通常情况下,选择apache+openssl类型的签名即可,如果网络服务器不是apache或者apache兼容的服务器,可以在列表里面选择适合的认证类型。
    ox02
    ssh 到域名所在的服务器,Namecheap SSL要求是生成2048位的密钥文件:
    openssl genrsa -out privkey.key 2048
    生成证书请求文件:
    openssl req -new -key privkey.key -out cert.csr
    执行以上命令后,会要求你填写基本信息,例如国家、邮箱等。其中有个需要特别注意到地方是Common Name,必须填写你的域名,而且不能有大写字母,否则认证申请会失败。另外在制作CSR文件和私钥的时候,会有一步询问你私钥的密码,可以不输入。
    用命令:cat cert.csr和cat privkey.key 能看到刚刚生成的CSR和Key文件内容了。其中SCR文件内容就是我们刚刚要激活SSL证书要用到的。
    ox03
    把这个csr文件的内容复制到Namecheap刚才申请时页面上的文本输入框里面,并且点击next,进行下一步。
    接下来要求你提供一个能表明你是域名所有者的邮箱来进行验证,你可以从他提供的选项中选择一个,确保你的邮箱可以正常接收邮件。选择一个邮箱后,点击next,你的申请就算提交了,下面需要等授权公司Comodo来验证你是域名所有者身份。
    收到邮件后点击邮箱里面的 here 链接,并且输入下面的验证码,提交给Comodo即可。接着继续等,comodo会将生成的ssl证书文件发送给你。
    ox04
    将自己Key文件,外加刚刚收到的.crt,共两个文件一同上传到VPS主机的某一个文件夹当中。编辑Nginx配置文件,在Server中主要是添加以下代码:
    listen 443;
    ssl on;

    ssl_certificate /root/curl_xyz.crt;

    ssl_certificate_key /root/privkey.key;

    ssl_session_timeout 5m;
    重启Nginx完成。

  • 使用 Vagrant 搭建跨平台开发环境

    Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用。可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员,成员可以在自己的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行。

    安装步骤1. 安装 VirtualBox

    虚拟机还是得依靠 VirtualBox 来搭建,免费小巧。
    下载地址:https://www.virtualbox.org/wiki/Downloads

    2. 安装 Vagrant

    下载地址:http://downloads.vagrantup.com/ 根据提示一步步安装。

    此外,还得下载官方封装好的基础镜像:
    Ubuntu precise 32 VirtualBox http://files.vagrantup.com/precise32.box
    Ubuntu precise 64 VirtualBox http://files.vagrantup.com/precise64.box

    其他系统的镜像下载:http://www.vagrantbox.es/

    3. 添加镜像到 Vagrant

    假设我们下载的镜像存放路径是 ~/box/precise64.box,在终端里输入:
    $ vagrant box add ubuntu64 ~/box/precise64.box

    ubuntu64 是我们给这个 box 命的名字,~/box/precise64.box 是 box 所在路径

    4. 初始化开发环境

    创建一个开发目录(比如:~/dev),你也可以使用已有的目录,切换到开发目录里,用  ubuntu64 镜像初始化当前目录的环境:
    $ cd ~/dev # 切换目录
    $ vagrant init  ubuntu64 # 初始化

    $ vagrant up # 启动环境

    你会看到终端显示了启动过程,启动完成后,我们就可以用 SSH 登录虚拟机了,剩下的步骤就是在虚拟机里配置你要运行的各种环境和参数了。
    $ vagrant ssh # SSH 登录
    $ cd /vagrant # 切换到开发目录,也就是宿主机上的 `~/dev`

    ~/dev 目录对应虚拟机中的目录是 /vagrant

    5. 其他设置

    Vagrant 初始化成功后,会在初始化的目录里生成一个 Vagrantfile 的配置文件,可以修改配置文件进行个性化的定制。

    Vagrant 默认是使用端口映射方式将虚拟机的端口映射本地从而实现类似 http://localhost:80 这种访问方式,这种方式比较麻烦,新开和修改端口的时候都得编辑。相比较而言,host-only 模式显得方便多了。打开 Vagrantfile,将下面这行的注释去掉(移除 #)并保存:
    config.vm.network :private_network, ip: “192.168.33.10”

    重启虚拟机,这样我们就能用 192.168.33.10 访问这台机器了,你可以把 IP 改成其他地址,只要不产生冲突就行。

    6. 打包分发

    当你配置好开发环境后,退出并关闭虚拟机。在终端里对开发环境进行打包:
    $ vagrant package
    打包完成后会在当前目录生成一个 package.box 的文件,将这个文件传给其他用户,其他用户只要添加这个 box 并用其初始化自己的开发目录就能得到一个一模一样的开发环境了。

    7. 常用命令
    $ vagrant init # 初始化

    $ vagrant up # 启动虚拟机

    $ vagrant halt # 关闭虚拟机

    $ vagrant reload # 重启虚拟机

    $ vagrant ssh # SSH 至虚拟机

    $ vagrant status # 查看虚拟机运行状态

    $ vagrant destroy # 销毁当前虚拟机

    更多内容请查阅官方文档 http://docs.vagrantup.com/v2/cli/index.html

    8. 注意事项

    使用 Apache/Nginx 时会出现诸如图片修改后但页面刷新仍然是旧文件的情况,是由于静态文件缓存造成的。需要对虚拟机里的 Apache/Nginx 配置文件进行修改:
    # Apache 配置添加:

    EnableSendfile off

    # Nginx 配置添加:
    sendfile off;

  • 获取 ajax return 的返回值

    function check_phone (phone) {
    $.ajax({

    url:URL,//请求的url地址

    dataType:”json”, //返回格式为json

    timeout: 10000,

    async:ture,//请求是否异步,默认为异步

    data:{phone:phone}, //参数值

    type:”POST”, //请求方式

    beforeSend:function(){

    },

    success:function(req){

    if(req.status == 0){

    return false;

    }else{

    return true;

    }

    },

    complete:function(){

    },

    error:function(XMLHttpRequest, textStatus, errorThrown){

    return false;

    }

    });

    }

    上面的函数,想返回true和false,在执行alert(check_phone(phone))时候是undefined,感觉在ajax中返回实际上函数没有返回值,应该在ajax外面执行return操作。

    function check_phone (phone) {

    var res = false;

    $.ajax({

    url:URL,//请求的url地址

    dataType:”json”, //返回格式为json

    timeout: 10000,

    async:false,//请求是否异步,默认为异步

    data:{phone:phone}, //参数值

    type:”POST”, //请求方式

    beforeSend:function(){

    },

    success:function(req){

    if(req.status == 0){

    res=false;

    }else{

    res=true;

    }

    },

    complete:function(){

    },

    error:function(XMLHttpRequest, textStatus, errorThrown){

    return false;

    }

    });

    return res;

    }

    注意:async:false。设置为同步的,必须等ajax执行完,返回相应返回值,否则直接return初始的var res=false了。

  • Laravel requires the Mcrypt PHP extension.

    I am trying to use the migrate function in Laravel 4 on OSX, however I am getting the error

    ​Laravel requires the Mcrypt PHP extension.

    What is wrong, and how can I fix it?

    (更多…)

  • mac下安装oci8扩展来支持php连接oracle

    下载oci8扩展包:
    http://pecl.php.net/package/oci8

    cd到解压目录执行phpize,发现错误,

    错误提示:
    Cannot find autoconf. Please check your autoconf installation and the
    $PHP_AUTOCONF environment variable. Then, rerun this script.

    解决方法:
    curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-latest.tar.gztar xzf autoconf-latest.tar.gz
    cd autoconf-*./configure –prefix=/usr/local
    make
    sudo make install

    (更多…)

  • 通过传递session_id解决uploadify上传PHP中丢失SESSION值的问题

     

    由于uploadify通过flash提交上传的文件,会导致在接收文件的PHP端出现获取SESSION值为空的情况,如果你要在PHP端验证用户的登录状态或验证用户输入的验证码是否正确你就需要解决SESSION取值的问题,下面给出uploadify上传中获取SESSION的方法:

    (更多…)

  • PHP中一个导出到excel的函数

    /**

    * 导出数据为excel表格

    *@param $data    一个二维数组,结构如同从数据库查出来的数组

    *@param $title   excel的第一行标题,一个数组,如果为空则没有标题

    *@param $filename 下载的文件名

    *@examlpe

    $stu = M (‘User’);

    $arr = $stu -> select();

    exportexcel($arr,array(‘id’,’账户’,’密码’,’昵称’),’文件名!’);

    */

    function exportexcel($data=array(),$title=array(),$filename=’report’){

    header(“Content-type:application/octet-stream”);

    header(“Accept-Ranges:bytes”);

    header(“Content-type:application/vnd.ms-excel”);

    header(“Content-Disposition:attachment;filename=”.$filename.”.xls”);

    header(“Pragma: no-cache”);

    header(“Expires: 0”);

    //导出xls 开始

    if (!empty($title)){

    foreach ($title as $k => $v) {

    $title[$k]=iconv(“UTF-8”, “GB2312”,$v);

    }

    $title= implode(“\t”, $title);

    echo “$title\n”;

    }

    if (!empty($data)){

    foreach($data as $key=>$val){

    foreach ($val as $ck => $cv) {

    $data[$key][$ck]=iconv(“UTF-8”, “GB2312”, $cv);

    }

    $data[$key]=implode(“\t”, $data[$key]);

    }

    echo implode(“\n”,$data);

    }

    }

  • php怎么处理​高并发网站?

    1,Webserver (Nginx) :这一层采用分布式部署,结合智能DNS解析可以简易地防止单点故障、实现区域访问加速,结合LVS很容易实现负载均衡。这一层主要是负责处理静态请求和转发PHP请求至第二层的PHP处理节点,对于静态资源地址可以单独拿出来部署,或者直接使用商用的云存储服务(国内七牛,又拍云,国外有Amazon S3)

    (更多…)