2015年8月

Windows下80端口被占用导致Apache无法启动解决方法

本来公司开发机用的是Win7,自家用的机器升级Win10一段时间了,感觉还不错,就把公司开发机也升级到了Win10,后来用到本地的Apache服务时发现启动不了了,netstat -ano | grep 80之后发现80端口被pid为4的系统进程占用了,就查了一下解决方法。

使用管理员身份运行cmd执行以下命令即可:

net stop http

sc config http start=disabled

phpize编译php扩展版本问题

今天在编译php的amqp扩展时遇到一个问题,就是加载扩展时php-fpm报出如下错误:

NOTICE: PHP message: PHP Warning:  PHP Startup: amqp: Unable to initialize module
Module compiled with module API=20121212
PHP    compiled with module API=20131226
These options need to match
 in Unknown on line 0

之前也遇到过类似的问题,原因是ubuntu自带了低版本的php,而我平时使用的php版本则为高版本的。

遇到这个情况也比较好解决,只要在编译命令里带上高版本phpize目录及php-config文件目录即可,对于我的情况即将命令改为类似以下形式:

/usr/local/php/bin/phpize && ./configure --with-amqp --with-php-config=/usr/local/php/bin/php-config && make && make install

注意编译之前需要删除上一次编译时make生成的文件,可能还要执行phpize -clean命令,否则即使修改了命令行中的路径也不会有效果。

使用Navicat管理Sae共享型Mysql数据库

Sae在国内PaaS方面可以说一直是处于领军地位的,虽然现在不像之前通过开发者认证就每月都有免费云豆领了,不过如果想用PaaS平台,Sae依旧是不错的选择。

Sae自带的phpmyadmin版本比较老了,估计很多人都希望能有个更好的工具来进行数据库管理,最近研究了一下用Navicat的http tunnel来连接sae的数据库,最终捣鼓成功了,在这里分享给大家。

首先安装Navicat,在安装根目录找到ntunnel_mysql.php文件,将该文件放到自己的项目中,可以自由重命名。

然后对该文件的以下内容进行修改,大约在193行左右:

$hs = $_POST["host"];
if( $_POST["port"] ) $hs .= ":".$_POST["port"];
$conn = mysql_connect($hs, $_POST["login"], $_POST["password"]);
$errno_c = mysql_errno();
if(($errno_c <= 0) && ( $_POST["db"] != "" )) {
    $res = mysql_select_db( $_POST["db"], $conn);
    $errno_c = mysql_errno();
}

修改为:

$username = 'yourusername';
$password = 'yourpassword';
if ($_POST["login"] == $username && $_POST["password"] == $password) {
    $hs = SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT;
    $conn = mysql_connect($hs, SAE_MYSQL_USER, SAE_MYSQL_PASS);
    $errno_c = mysql_errno();
    if(($errno_c <= 0)) {
        $res = mysql_select_db(SAE_MYSQL_DB, $conn);
        $errno_c = mysql_errno();
    }
} else {
    EchoHeader(401);
    echo GetBlock("Authentication failed");
    exit();
}

注意将上面代码中的$username和$password定义成你自己想要设置的用户名和密码,这个只是做校验用,下面Navicat连接时会用到。修改好后就将文件上传至sae,注意该文件要能被访问。

接下来就可以到Navicat里新增链接了,主机名和端口随便填即可,但不能为空,用户名和密码即为上一步的$username和$password,注意修改为自己设置的。

QQ截图20150823222243.jpg

接下来在高级标签里选择使用高级连接,点击添加数据库,数据库名即为下图中红框标出来的部分,可以在sae自带的phpmyadmin的界面中看到。

QQ截图20150823222800.jpg

QQ截图20150823222539.jpg

在http标签中选择使用http通道,通道地址即为你项目中该ntunnel_mysql.php文件的路径。

QQ截图20150823222849.jpg

最后点击连接测试,不出意外此时就能使用Navicat来管理sae数据库了。

阿里云代备案流程记录

最近感觉在国内做个站没备案真心不方便,都不能用国内的cdn节点,正好最近把魔都的居住证办下来了,就搞了一下备案。

目前国内代备案做的最好的大概就是阿里云了,不仅备案系统使用方便,而且全程不用花一分钱,如果是在魔都备案的话,整个弄下来两天也就足够了。

首先按照阿里的教程在备案系统填好相关信息,该上传的证件照片拍好上传就行。自己备案的时候遇到的两个注意点:一是个人备案也不需要填座机,我备案的时候貌似不填不让提交,如果也遇到这种情况随便填一个就行,阿里云的工作人员在电话确认时会帮忙删掉的;二是网站备案信息真实性核验单如果不方便打印出来签字再扫描或者想要方便点的话,可以ps手写体的签名上去,基本可以通过。信息都提交好后就是等阿里云工作人员的初审,通过的话会打电话确认,一般很快就会通过,效率很高。

通过初审后就是办理拍照,如果方便去核验点拍照也可以去核验点,一般都是选择邮寄幕布,免费的,杭州到魔都第二天就到了。幕布到了按照要求拍张照上传就行,然后继续等待审核,一般上传照片后也很快就会有工作人员电话联系,来确认提交信息至管局。

之后就等管局了,如果是大魔都,基本阿里云短信通知已提交信息后半小时备案就下来了,据说有概率打电话询问信息,不过我是没遇到,直接就短信通知备案号和备案密码了。

总的来说,在阿里云代备案还是十分轻松愉快的,不用阿里云ECS的申请一个万网的两年免费虚拟主机就可以在阿里云代备案了。

极简图床、sm.ms图床curl上传图片

极简图床是一个基于七牛的图床程序,使用方便、界面简洁美观,美中不足就是没有开放api,目前代码也没有开源。为了方便的在程序中上传图片至极简图床,我写了一段代码用curl来模拟上传图片,供大家参考:

<?php
$data = base64_encode(file_get_contents('test.jpg'));

$ch = curl_init('http://yotuku.cn/upload?name=');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: text/plain',                                                                                
    'Content-Length: ' . strlen($data))                                                                       
);                                                                                                                   

$result = curl_exec($ch);
echo $result;

sm.ms是vps.to、shadowsocks.com等站的站长,拥有t.tt、s.how等神域名的人建的一个图床,支持全站https,下面是curl上传图片至该站的代码:

<?php
$url = 'https://sm.ms/index.php?act=upload';
$image = curl_file_create(realpath('test.jpg'), 'image/jpg', 'test.jpg');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['smfile' => $image]);
$data = curl_exec($ch);
curl_close($ch);
echo $data;