分类 我爱编程 下的文章

PHP curl_getinfo()相关使用

(PHP 4 >= 4.0.4, PHP 5, PHP 7)

curl_getinfo获取一个cURL连接资源句柄的信息

说明

mixed curl_getinfo ( resource $ch [, int $opt= 0 ] )

获取最后一次传输的相关信息。

参数

ch

curl_init() 返回的 cURL 句柄。

opt

这个参数可能是以下常量之一:



  • CURLINFO_EFFECTIVE_URL - 最后一个有效的URL地址
  • CURLINFO_HTTP_CODE - 最后一个收到的HTTP代码
  • CURLINFO_FILETIME - 远程获取文档的时间,如果无法获取,则返回值为“-1”
  • CURLINFO_TOTAL_TIME - 最后一次传输所消耗的时间
  • CURLINFO_NAMELOOKUP_TIME - 名称解析所消耗的时间
  • CURLINFO_CONNECT_TIME - 建立连接所消耗的时间
  • CURLINFO_PRETRANSFER_TIME - 从建立连接到准备传输所使用的时间
  • CURLINFO_STARTTRANSFER_TIME - 从建立连接到传输开始所使用的时间
  • CURLINFO_REDIRECT_TIME - 在事务传输开始前重定向所使用的时间
  • CURLINFO_SIZE_UPLOAD - 上传数据量的总值
  • CURLINFO_SIZE_DOWNLOAD - 下载数据量的总值
  • CURLINFO_SPEED_DOWNLOAD - 平均下载速度
  • CURLINFO_SPEED_UPLOAD - 平均上传速度
  • CURLINFO_HEADER_SIZE - header部分的大小
  • CURLINFO_HEADER_OUT - 发送请求的字符串
  • CURLINFO_REQUEST_SIZE - 在HTTP请求中有问题的请求的大小
  • CURLINFO_SSL_VERIFYRESULT - 通过设置CURLOPT_SSL_VERIFYPEER返回的SSL证书验证请求的结果
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD - 从Content-Length: field中读取的下载内容长度
  • CURLINFO_CONTENT_LENGTH_UPLOAD - 上传内容大小的说明
  • CURLINFO_CONTENT_TYPE - 下载内容的Content-Type:值,NULL表示服务器没有发送有效的Content-Type: header

返回值

如果 opt 被设置,以字符串形式返回它的值。否则,返回返回一个包含下列元素的关联数组(它们分别对应于 opt):

  • "url"
  • "content_type"
  • "http_code"
  • "header_size"
  • "request_size"
  • "filetime"
  • "ssl_verify_result"
  • "redirect_count"
  • "total_time"
  • "namelookup_time"
  • "connect_time"
  • "pretransfer_time"
  • "size_upload"
  • "size_download"
  • "speed_download"
  • "speed_upload"
  • "download_content_length"
  • "upload_content_length"
  • "starttransfer_time"
  • "redirect_time"

更新日志

版本 说明
5.1.3 引入CURLINFO_HEADER_OUT.

PHP如何判断远程图片文件是否存在

1、使用fopen()函数,它要在allow_url_open开启的状态下,否则会报错。

$url = 'http://www.phpddt.com/img/qrcode_for_phpddt.JPG';
if(@fopen($url, 'r')) {
    echo '文件存在';
} else {
    echo '文件不存在';
}

2、get_headers取得服务器响应一个 HTTP 请求所发送的所有标头。

$url = 'http://www.phpddt.com/img/qrcode_for_phpddt.JPG';
stream_context_set_default(
    array(
        'http' => array(
            'timeout' => 1,
        )
    )
);
$headers = get_headers($url);
if(preg_match('/200/',$headers[0])) {
    echo '文件存在';
} else {
    echo '文件不存在';
}

 

3、file_get_contents()函数。

$opts = array(
    'http'=>array(
        'timeout'=>3,
    )
);
$context = stream_context_create($opts);
$resource = @file_get_contents('http://www.phpddt.com/img/qrcode_for_phpddt.JPG', false, $context);
if($resource) {
    echo '文件存在';
} else {
    echo '文件不存在';
}

4、最后一种为写一个方法模拟用户打开URL,根绝URL返回的信息来判断是否为文件,此方法适合当文件为空时被重定向。

public function urlExists($url) {
    $fileType = array('video','image','audio');
    $ch = curl_init();//初始化一个url会话
    curl_setopt ($ch, CURLOPT_URL, $url);
    //不下载
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    //设置超时
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $http_type = curl_getinfo($ch,CURLINFO_CONTENT_TYPE);
    $type = strstr($http_type,'/',true);
    if($http_code == 200 && in_array($type,$fileType)) {
        return true;
    }
    return false;
}

重启crontab服务

可以分为两种情况:

1.在系统中有service这个命令时:
这个命令在red hat当中常用,有的linux发行版本中没有这个命令.
$ service crond start //启动服务
$ service crond stop //关闭服务
$ service crond restart //重启服务

2.linux发行版本没有service这个命令时:
/etc/init.d/cron stop
/etc/init.d/cron start

重置mysql主从同步(MySQL Reset Master-Slave Replication)

在mysql主从同步的过程中,可能会因为各种原因出现主库与从库不同步的情况,网上虽然有一些解决办法,但是有时很难彻底解决,重置主从服务器也许不是最快的办法,但却是最安全有效的。

下面将自己重置主从同步的步骤总结一下,以备不时之需。

master与slave均使用:centos6.0+mysql 5.1.61 ,假设有db1,db2两个数据库需要热备。

文中shell与mysql均使用root账号,在真实环境中,请根据情况更换。

 

1.停止slave服务器的主从同步

为了防止主从数据不同步,需要先停止slave上的同步服务。

STOP SLAVE;

 

2.对master服务器的数据库加锁

为了避免在备份的时候对数据库进行更新操作,必须对数据库加锁。

FLUSH TABLES WITH READ LOCK;

如果是web服务器也可以关闭apache或nginx服务,效果也是一样的。

 

3.备份master上的数据

mysqldump -u root -p -databases db1 db2 > bak.sql

 

4.重置master服务

RESET MASTER;

这个是重置master的核心语法,看一下官方解释。

RESET MASTER removes all binary log files that are listed in the index file, leaving only a single, empty binary log file with a numeric suffix of .000001, whereas the numbering is not reset by PURGE BINARY LOGS.RESET MASTER is not intended to be used while any replication slaves are running. The behavior of RESET MASTER when used while slaves are running is undefined (and thus unsupported), whereas PURGE BINARY LOGS may be safely used while replication slaves are running.

大概的意思是RESET MASTER将删除所有的二进制日志,创建一个.000001的空日志。RESET MASTER并不会影响SLAVE服务器上的工作状态,所以盲目的执行这个命令会导致slave找不到master的binlog,造成同步失败。

但是我们就是要重置同步,所以必须执行它。

 

5.对master服务器的数据库解锁

UNLOCK TABLES;

如果你停止了apache或nginx,请开启它们

 

6.将master上的备份文件拷贝到slave服务器上

大可不必用WinScp先下载到本地再上传到slave上,可以直接使用scp命令在服务器间拷贝,速度更快。

scp -r root@XXX.XXX.XXX.XXX:/root/bak.sql ./

 

7.删除slave服务器上的旧数据

删除前,请先确认该备份的是否都备份了。

DROP DATABASE db1;
DROP DATABASE db2;

 

8.导入数据

SOURCE /root/bak.sql;

 

9.重置slave服务

RESET SLAVE;

还是看一下官方解释

RESET SLAVE makes the slave forget its replication position in the master's binary log. This statement is meant to be used for a clean start: It deletes the master.info and relay-log.info files, all the relay log files, and starts a new relay log file. To use RESET SLAVE, the slave replication threads must be stopped (use STOP SLAVE if necessary).

大概意思是,RESET SLAVE将清除slave上的同步位置,删除所有旧的同步日志,使用新的日志重新开始,这正是我们想要的。需要注意的是,必须先停止slave服务(STOP SLAVE),我们已经在第一步停止了它。

 

10.开启slave服务

START SLAVE;

 

大功告成,SHOW SLAVE STATUS\G 检查同步状态,一切正常。

 

转:xiaozi博客http://www.cnblogs.com/sunyuxun/archive/2012/09/13/2683338.html

Mysql主从同步相关问题

1、主库是否能连接成功使用mysql -h hostname -u username -p password ;如连接失败提示Can't get hostname for your address,修改主库my.cnf,在[mysqld]下面增加skip-name-resolve //允许使用hostname连接.

2、检查账号密码是否正确;

3、检查 File | Position是否对应主库,查看主库日志是否偏移。

4、建议设置同步时的SQL语句为大写语句:
CHANGE MASTER TO MASTER_HOST='',MASTER_PORT=3306,MASTER_USER='',MASTER_PASSWORD='',MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=107;