猴子选大王算法

2017 年 8 月 22 日 at 下午 3:10分类:PHP

猴子选大王
从1号猴子开始沿顺时针方向从1开始报数,报到n的猴子出局
再从刚出局猴子的下一个位置重新开始报数
如此重复
直至剩下一个猴子,它就是大王

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function monkeyKing($m, $n){
    $arr=range(1,$m);
    $i = 0;
    while(count($arr) > 1){
        if(($i+1)%$n == 0){
            unset($arr[$i]);
        }else{
            // 没有叫到n的放回数组
            array_push($arr, $arr[$i]);
            //删除本次循环的数字
            unset($arr[$i]);
        }
        $i++;
    }
    return reset($arr);
}
var_dump(monkeyKing(10,3));
exit;

php导出csv乱码问题解决

2017 年 8 月 7 日 at 下午 1:32分类:PHP

在用PHP导出CSV文件时,如果写入的数据是使用UTF-8编码
导出时候会出现乱码 两种办法
1.都转换成gbk输出(这样有个问题就是有的个别字转码会出现乱码)

2.直接utf8输出

header(‘Expires: 0′);
header(‘Cache-control: private’);
header(‘Cache-Control: must-revalidate, post-check=0, pre-check=0′);
header(‘Content-Description: File Transfer’);
header(‘Content-Encoding: UTF-8′);
header(‘Content-type: text/csv; charset=UTF-8′);
header(‘Content-Disposition: attachment; filename=测试.csv’);
echo “\xEF\xBB\xBF”;//输出BOM头

这样写就不会出现乱码的问题了。

auto_prepend_file与auto_append_file使用方法

2017 年 8 月 4 日 at 下午 4:16分类:PHP

php.ini中有两项
auto_prepend_file 在页面顶部加载文件
auto_append_file 在页面底部加载文件
例如:
auto_prepend_file = “/data/start.php”
auto_append_file = “/data/end.php”
修改后重启服务器,这样所有页面的顶部与底部都会require /data/start.php 与 /data/end.php

还有可以在服务上设置,这样不会影响别的项目
apache
php_value auto_prepend_file /data/start.php
php_value auto_append_file /data/end.php

nginx

fastcgi_param PHP_VALUE “auto_prepend_file=/data/start.php”;
fastcgi_param PHP_VALUE “auto_append_file=/data/end.php”;

php实现下拉框版无限极分类树

2017 年 7 月 31 日 at 下午 3:24分类:PHP

直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$category = array(  
    0=>array('cat_id'=>1,'cat_name'=>'北京市','parent_id'=>0),
    1=>array('cat_id'=>2,'cat_name'=>'东城区','parent_id'=>1),
    2=>array('cat_id'=>3,'cat_name'=>'西城区','parent_id'=>1),
    3=>array('cat_id'=>4,'cat_name'=>'昌平区','parent_id'=>1),
    4=>array('cat_id'=>5,'cat_name'=>'河北省','parent_id'=>0),
    5=>array('cat_id'=>6,'cat_name'=>'张家口','parent_id'=>5),
    6=>array('cat_id'=>7,'cat_name'=>'南邵镇','parent_id'=>4),
); 
 
$list = categoryTree($category,0,0);
 
echo showSelect($list,0);
exit; 
 
/**
 * 数据数组设置层级.
 *
 * @param array  $category   数据数组.
 * @param string $parent_id  父级id.
 * @param string $level      层级id.
 *
 * @return array.
 */
function categoryTree($category, $parent_id = 0, $level = 0) {
    static $res = array();
    foreach($category as $v) { 
        if($v['parent_id'] == $parent_id) {
            $v['level'] = $level;  
            $res[] = $v;  
            categoryTree($category,$v['cat_id'],$level+1);  
        }  
    } 
    return $res;  
}
/**
 * 显示下拉框.
 *
 * @param array  $list    数据数组.
 * @param string $cat_id  选中id.
 *
 * @return string.
 */
function showSelect($list, $cat_id = 0){
    $str = '<select id="cat_id" name="cat_id"><option value="0">请选择</option>';
    foreach($list as $row) {
    	$select = '';
    	if($cat_id==$row['cat_id']){
    		$select = "selected";
    	}
    	$str .= '<option value="'.$row['cat_id'].'">'.str_repeat('    ', $row['level']).'|---'.$row['cat_name'].'</option>';
    }
    $str.='</select>';
    return $str;
}

效果如图:

留着备用,如果有问题可以留言。

curl返回常见错误码

2017 年 4 月 12 日 at 下午 4:19分类:PHP

CURLE_UNSUPPORTED_PROTOCOL(1)

你的URL传递给libcurl的使用协议,这libcurl的不支持。支持可能是你没有使用一个编译时的选项,它可以是一个拼写错的协议字符串,或者只是一个协议的libcurl没有代码。

 

CURLE_FAILED_INIT(2)

非常早期的初始化代码失败。这可能是内部错误或问题,资源问题,一些基本的东西可能无法完成初始化时间。

CURLE_URL_MALFORMAT(3)

该网址的格式不正确。

CURLE_NOT_BUILT_IN(4)

libcurl的内置在一个编译时决定所要求的功能,协议或购股权没有被发现。这意味着,一个功能或选项是不启用或明确禁用的libcurl建时,为了得到它的功能,你必须得到一个重建的libcurl的。

CURLE_COULDNT_RESOLVE_PROXY(5)

无法解析代理服务器。代理主机无法得到解决。

CURLE_COULDNT_RESOLVE_HOST(6)

无法解析主机。给定的远程主机没有得到解决。

CURLE_COULDNT_CONNECT(7)

connect()的主机或代理失败。

CURLE_FTP_WEIRD_SERVER_REPLY(8)

连接到一个FTP服务器后,libcurl的预期得到一定的回复返回。这个错误代码表示,它有一个奇怪的或坏的答复。指定的远程服务器可能不是一个确定的FTP服务器。

CURLE_REMOTE_ACCESS_DENIED(9)

我们被拒绝访问的资源的URL。对于FTP,发生这种情况而力图改变的远程目录。

CURLE_FTP_ACCEPT_FAILED(10)

在等待服务器的连接时,一个主动FTP会话使用,被送到控制连接或类似的错误代码。

CURLE_FTP_WEIRD_PASS_REPLY(11)

发送到服务器的FTP密码后,libcurl的预计正确的答复。此错误代码指示返回了意外的代码。

CURLE_FTP_ACCEPT_TIMEOUT(12)

在当前的FTP会话在等待服务器连接,CURLOPT_ACCEPTTIMOUT_MS(或内部默认),超时过期。

CURLE_FTP_WEIRD_PASV_REPLY(13)

libcurl的失败作为一个PASV或EPSV命令从服务器得到一个合理的结果。服务器是有缺陷的。

CURLE_FTP_WEIRD_227_FORMAT(14)

FTP服务器返回一个227行作为一个PASV命令的响应。如果libcurl的无法解析该行,此返回代码被传递回。

CURLE_FTP_CANT_GET_HOST(15)

内部故障查找主机使用新的连接。

CURLE_FTP_COULDNT_SET_TYPE(17)

收到一个错误,当试图传送模式设置为二进制或ASCII。

CURLE_PARTIAL_FILE(18)

文件传输,短于或大于预期。发生这种情况时,服务器首先报告预期的传输大小,然后提供数据不匹配前面给出的大小。

CURLE_FTP_COULDNT_RETR_FILE(19)

这是一个奇怪的回答“RETR”命令或一个零字节传输完成。

CURLE_QUOTE_ERROR(21)

当发送到远程服务器,自定义的“QUOTE”命令的一个命令返回的错误代码为400或更高(对于FTP)或表示不成功的完成命令。

CURLE_HTTP_RETURNED_ERROR(22)

这是返回CURLOPT_FAILONERROR设置为TRUE和HTTP服务器返回的错误代码是> = 400。

CURLE_WRITE_ERROR(23)

发生错误,写作时接收到的数据到本地文件,或者返回错误libcurl的一个写回调。

CURLE_UPLOAD_FAILED(25)

开始上载失败。对于FTP,服务器通常否认的STOR命令。通常的错误缓冲区包含了服务器的解释。

CURLE_READ_ERROR(26)

有一个问题读取本地文件或返回一个错误的读回调。

CURLE_OUT_OF_MEMORY(27)

内存分配请求失败。这是严重的不良和活动,如果发生过严重搞砸了。

CURLE_OPERATION_TIMEDOUT(28)

操作超时。根据条件达到指定的超时期间。

CURLE_FTP_PORT_FAILED(30)

FTP PORT命令返回错误。这主要是当你还没有足够的地址指定了一个良好的libcurl的使用。SeeCURLOPT_FTPPORT。

CURLE_FTP_COULDNT_USE_REST(31)

FTP REST命令返回错误。如果服务器是明智的,这不应该发生。

CURLE_RANGE_ERROR(33)

服务器不支持或接受范围请求。

CURLE_HTTP_POST_ERROR(34)

这是一个奇怪的错误,主要发生是由于内部的混乱。

CURLE_SSL_CONNECT_ERROR(35)

出现问题的地方,在SSL / TLS握手。你真正想要的的错误缓冲区和阅读邮件,因为它针对问题稍微。可能是证书(文件格式,路径,权限),密码,和其他人。

CURLE_BAD_DOWNLOAD_RESUME(36)

下载无法恢复,因为指定的偏移量为文件的边界。

CURLE_FILE_COULDNT_READ_FILE(37)

无法打开的文件FILE :/ /。最有可能的,因为该文件的路径不能识别现有文件。你是否检查文件的权限?

CURLE_LDAP_CANNOT_BIND(38)

LDAP无法绑定。LDAP绑定操作失败。

CURLE_LDAP_SEARCH_FAILED(39)

LDAP搜索失败。

CURLE_FUNCTION_NOT_FOUND(41)

函数没有找到。一个必需的zlib的功能没有被发现。

CURLE_ABORTED_BY_CALLBACK(42)

通过回调中止。返回的回调“中止”libcurl的。

CURLE_BAD_FUNCTION_ARGUMENT(43)

内部错误。函数调用了一个错误的参数。

CURLE_INTERFACE_FAILED(45)

接口错误。指定的出接口不能使用。设置接口使用传出连接的源IP地址与CURLOPT_INTERFACE。

CURLE_TOO_MANY_REDIRECTS(47)

过多的重定向。以下重定向时,libcurl的创下的最高金额。设置您的与CURLOPT_MAXREDIRS限制。

CURLE_UNKNOWN_OPTION(48)

无法识别的选项传递给libcurl的/。请参阅相应的文档。这是最有可能在程序中使用libcurl的问题。的的错误缓冲区可能包含准确的选项,它涉及更具体的信息。

CURLE_TELNET_OPTION_SYNTAX(49)

telnet选项字符串被非法格式化。

CURLE_PEER_FAILED_VERIFICATION(51)

远程服务器的SSL证书或SSH的MD5指纹被认为是不正常的。

CURLE_GOT_NOTHING(52)

没有从服务器返回的,和得到什么的情况下,被认为是一个错误。

CURLE_SSL_ENGINE_NOTFOUND(53)

未找到指定的加密引擎。

CURLE_SSL_ENGINE_SETFAILED(54)

设置所选的SSL加密引擎,默认情况下失败!

CURLE_SEND_ERROR(55)

发送网络数据失败。

CURLE_RECV_ERROR(56)

如果接收网络数据。

CURLE_SSL_CERTPROBLEM(58)

与当地的客户端证书的问题。

CURLE_SSL_CIPHER(59)

无法使用指定的密码。

CURLE_SSL_CACERT(60)

同侪凭证不能与已知的CA证书进行身份验证。

CURLE_BAD_CONTENT_ENCODING(61)

无法识别的传输编码。

CURLE_LDAP_INVALID_URL(62)

无效的LDAP URL。

CURLE_FILESIZE_EXCEEDED(63)

最大文件大小超过。

CURLE_USE_SSL_FAILED(64)

要求FTP SSL水平失败。

CURLE_SEND_FAIL_REWIND(65)

在做了一个发送操作卷曲,倒带重传的数据,但的倒带操作失败。

CURLE_SSL_ENGINE_INITFAILED(66)

SSL发动机启动失败。

CURLE_LOGIN_DENIED(67)

远程服务器拒绝卷曲登录(加入7.13.1)

CURLE_TFTP_NOTFOUND(68)

TFTP服务器上找不到文件。

CURLE_TFTP_PERM(69)

TFTP服务器上的权限问题。

CURLE_REMOTE_DISK_FULL(70)

出在服务器上的磁盘空间。

CURLE_TFTP_ILLEGAL(71)

非法的TFTP操作。

CURLE_TFTP_UNKNOWNID(72)

未知TFTP传输ID。

CURLE_REMOTE_FILE_EXISTS(73)

文件已经存在,并不会被覆盖。

CURLE_TFTP_NOSUCHUSER(74)

这个错误不应该被返回正常工作的TFTP服务器。

CURLE_CONV_FAILED(75)

字符转换失败。

CURLE_CONV_REQD(76)

调用者必须注册转换回调。

CURLE_SSL_CACERT_BADFILE(77)

问题读取SSL证书(路径的访问权限?)

CURLE_REMOTE_FILE_NOT_FOUND(78)

不存在的URL引用的资源。

CURLE_SSH(79)

未指定的错误发生在SSH会话。

CURLE_SSL_SHUTDOWN_FAILED(80)

关闭SSL连接失败。

CURLE_AGAIN(81)

Socket是没有准备好发送/接收等待,直到它准备好了,然后再试一次。此返回代码仅返回从 curl_easy_recv(3)  和  (3) (加入7.18.2 curl_easy_send),

CURLE_SSL_CRL_BADFILE(82)

无法加载CRL文件(在7.19.0版加入)

CURLE_SSL_ISSUER_ERROR(83)

发行人检查失败(在7.19.0版加入)

CURLE_FTP_PRET_FAILED(84)

FTP服务器不理解的PRET命令,所有不支持给定的参数。要小心时usingCURLOPT_CUSTOMREQUEST,自定义列表“命令将发送PRET CMD前PASV以及。(添加在7.20.0)

CURLE_RTSP_CSEQ_ERROR(85)

RTSP的Cseq号码不匹配。

CURLE_RTSP_SESSION_ERROR(86)

RTSP会话标识符不匹配。

CURLE_FTP_BAD_FILE_LIST(87)

无法,解析FTP文件列表(在FTP通配符下载)。

CURLE_CHUNK_FAILED(88)

块回调报告错误。

CURLE_OBSOLETE *

这些错误代码永远不会返回。它们被用来在一个老的libcurl版本,当前未使用

========================================

CURL状态码列表(详细)

CURL状态码列表

状态码

状态原因

解释

0

正常访问

1

错误的协议

未支持的协议。此版cURL 不支持这一协议。

2

初始化代码失败

初始化失败。

3

URL格式不正确

URL 格式错误。语法不正确。

4

请求协议错误

5

无法解析代理

无法解析代理。无法解析给定代理主机。

6

无法解析主机地址

无法解析主机。无法解析给定的远程主机。

7

无法连接到主机

无法连接到主机。

8

远程服务器不可用

FTP 非正常的服务器应答。cURL 无法解析服务器发送的数据。

9

访问资源错误

FTP 访问被拒绝。服务器拒绝登入或无法获取您想要的特定资源或目录。最有可
能的是您试图进入一个在此服务器上不存在的目录。

11

FTP密码错误

FTP 非正常的PASS 回复。cURL 无法解析发送到PASS 请求的应答。

13

结果错误

FTP 非正常的的PASV 应答,cURL 无法解析发送到PASV 请求的应答。

14

FTP回应PASV命令

FTP 非正常的227格式。cURL 无法解析服务器发送的227行。

15

内部故障

FTP 无法连接到主机。无法解析在227行中获取的主机IP。

17

设置传输模式为二进制

FTP 无法设定为二进制传输。无法改变传输方式到二进制。

18

文件传输短或大于预期

部分文件。只有部分文件被传输。

19

RETR命令传输完成

FTP 不能下载/访问给定的文件, RETR (或类似)命令失败。

21

命令成功完成

FTP quote 错误。quote 命令从服务器返回错误。

22

返回正常

HTTP 找不到网页。找不到所请求的URL 或返回另一个HTTP 400或以上错误。
此返回代码只出现在使用了-f/–fail 选项以后。

23

数据写入失败

写入错误。cURL 无法向本地文件系统或类似目的写入数据。

25

无法启动上传

FTP 无法STOR 文件。服务器拒绝了用于FTP 上传的STOR 操作。

26

回调错误

读错误。各类读取问题。

27

内存分配请求失败

内存不足。内存分配请求失败。

28

访问超时

操作超时。到达指定的超时期限条件。

30

FTP端口错误

FTP PORT 失败。PORT 命令失败。并非所有的FTP 服务器支持PORT 命令,请
尝试使用被动(PASV)传输代替!

31

FTP错误

FTP 无法使用REST 命令。REST 命令失败。此命令用来恢复的FTP 传输。

33

不支持请求

HTTP range 错误。range “命令”不起作用。

34

内部发生错误

HTTP POST 错误。内部POST 请求产生错误。

35

SSL/TLS握手失败

SSL 连接错误。SSL 握手失败。

36

下载无法恢复

FTP 续传损坏。不能继续早些时候被中止的下载。

37

文件权限错误

文件无法读取。无法打开文件。权限问题?

38

LDAP可没有约束力

LDAP 无法绑定。LDAP 绑定(bind)操作失败。

39

LDAP搜索失败

LDAP 搜索失败。

41

函数没有找到

功能无法找到。无法找到必要的LDAP 功能。

42

中止的回调

由回调终止。应用程序告知cURL 终止运作。

43

内部错误

内部错误。由一个不正确参数调用了功能。

45

接口错误

接口错误。指定的外发接口无法使用。

47

过多的重定向

过多的重定向。cURL 达到了跟随重定向设定的最大限额跟

48

无法识别选项

指定了未知TELNET 选项。

49

TELNET格式错误

不合式的telnet 选项。

51

远程服务器的SSL证书

peer 的SSL 证书或SSH 的MD5指纹没有确定。

52

服务器无返回内容

服务器无任何应答,该情况在此处被认为是一个错误。

53

加密引擎未找到

找不到SSL 加密引擎。

54

设定默认SSL加密失败

无法将SSL 加密引擎设置为默认。

55

无法发送网络数据

发送网络数据失败。

56

衰竭接收网络数据

在接收网络数据时失败。

57

58

本地客户端证书

本地证书有问题。

59

无法使用密码

无法使用指定的SSL 密码。

60

凭证无法验证

peer 证书无法被已知的CA 证书验证。

61

无法识别的传输编码

无法辨识的传输编码。

62

无效的LDAP URL

无效的LDAP URL。

63

文件超过最大大小

超过最大文件尺寸。

64

FTP失败

要求的FTP 的SSL 水平失败。

65

倒带操作失败

发送此数据需要的回卷(rewind)失败。

66

SSL引擎失败

初始化SSL 引擎失败。

67

服务器拒绝登录

用户名、密码或类似的信息未被接受,cURL 登录失败。

68

未找到文件

在TFTP 服务器上找不到文件。

69

无权限

TFTP 服务器权限有问题。

70

超出服务器磁盘空间

TFTP 服务器磁盘空间不足。

71

非法TFTP操作

非法的TFTP 操作。

72

未知TFTP传输的ID

未知TFTP 传输编号(ID)。

73

文件已经存在

文件已存在(TFTP) 。

74

错误TFTP服务器

无此用户(TFTP) 。

75

字符转换失败

字符转换失败。

76

必须记录回调

需要字符转换功能。

77

CA证书权限

读SSL 证书出现问题(路径?访问权限? ) 。

78

URL中引用资源不存在

URL 中引用的资源不存在。

79

错误发生在SSH会话

SSH 会话期间发生一个未知错误。

80

无法关闭SSL连接

未能关闭SSL 连接。

81

服务未准备

82

无法载入CRL文件

无法加载CRL 文件,丢失或格式不正确(在7.19.0版中增加) 。

83

发行人检查失败

签发检查失败(在7.19.0版中增加) 。

mysql导入数据失败 报错SQL1153

2017 年 1 月 23 日 at 上午 12:12分类:Mysql

mysql 导入数据失败 报错

Mysql导入备份文件发生错误 SQL1153

[SQL] 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes
SET GLOBAL max_allowed_packet=1000000000;
SET GLOBAL net_buffer_length=1000000;

centos 自动获取IP

2017 年 1 月 19 日 at 上午 10:31分类:Linux

dhclient eth0 自动分配ip给eth0

要让它随系统启动后自动获取需要修改 /etc/sysconfig/network-scripts/ifcfg-eth0

将ONBOOT=”no”改为ONBOOT=”yes”。

xhprof 参数及输出字段详解

2017 年 1 月 19 日 at 上午 9:44分类:PHP

ct 函数调用次数,
wt 花费的时间,
cpu 花费的 CPU 时间(微秒即百万分之一秒),
mu 使用的内存(bytes),
pmu 使用的内存峰值(bytes)。
Calls:函数的调用次数
Incl. Wall Time (microsec) :包含内部函数花费的时间,单位微秒
Excl. Wall Time (microsec):不包含内部函数花费的时间,单位微秒
及所占百分比(%)
注:Incl.:为 Including 包含的简写
Excl.:为 Excluding 不包含的简写
Wall Time:意为挂钟时间即任务花费的时间
main():一个虚构的函数,程序根节点
bar@2:递归调用 2 次
Incl. CPU (microsecs):包含内部函数 CPU 花费的时间,单位微秒
Excl. CPU (microsec):不包含内部函数 CPU 花费的时间,单位微秒
Incl. MemUse (bytes):包含内部函数所占内存,单位字节
Excl. MemUse (bytes):不包含内部函数所占内存,单位字节
Incl. PeakMemUse (bytes):包含内部函数所占内存峰值,单位字节
Excl. PeakMemUse (bytes):不包含内部函数所占内存峰值,单位字节
及所占百分比(%)

可以认为共三种情况:
1. 包括内部函数
2. 不包括内部函数或者说函数本身
3. 所占总数(时间或内存使用)的百分比
将xhprof_lib&&xhprof_html相关目录copy到可以访问到的地址
访问 xxx/xhprof_html/index.php?run=$run_id&source=bluefrog 就可经看到你的php代码运行的相关情况

下面是一些参数说明
Inclusive Time 包括子函数所有执行时间。
Exclusive Time/Self Time 函数执行本身花费的时间,不包括子树执行时间。
Wall Time 花去了的时间或挂钟时间。
CPU Time 用户耗的时间+内核耗的时间
Inclusive CPU 包括子函数一起所占用的CPU
Exclusive CPU 函数自身所占用的CPU

 

把这个代码文件部署到/www/sites/xhprof.php目录后,就可以启用这个文件了。因为我们想对PHP应用代码不进行代码侵入,那么我们就只能通过如下几种方式启用:
* Nginx/PHP-FPM 方式:
fastcgi_param PHP_VALUE “auto_prepend_file=/www/sites/xhprof.php”;
* Apache 方式:
php_value auto_prepend_file “/www/sites/xhprof.php”
* php.ini 方式:
auto_prepend_file=”/www/sites/xhprof.php”
注意:如果使用了 opcode 缓存,记得要重启你的 php 进程。

7、查看性能分析日志
tail /tmp/xhprof.log

注意:
1、在正式启用前,一定要确认不会影响正常的数据输出。确认输出内容无异后,再上线。
2、每个url的max_time不要设置的过小。
3、xhprof会影响线上服务的性能,因此最好只在一台机器上进行监控,或者 修改xhprof.php代码,对请求进行随机监控。

** xhprof gui,让xhprof界面更漂亮,功能更强大

php保存excel xls格式文件

2016 年 12 月 13 日 at 上午 9:24分类:PHP

<?php
header(“Content-type: application/vnd.ms-excel; charset=utf-8″);
header(“Content-Disposition: attachment; filename=123.xls”);
$data  = ’1′ . “\t\n”;
$data .= ’3′. “\t” . ’4′ . “\t” .’555′ . “\t” . ’222′ . “\n”;
echo  $data . “\t”;
exit;
?>

jquery 获取相同class标签的值 存入数组 判断数组是否包含了指定的元素

2016 年 11 月 17 日 at 下午 3:20分类:Other

<script>
var arr = new Array();
var b= ‘aaa’;
$(‘.txt’).each(function(){
arr.push($(this).text());
});
res = $.inArray(b, arr);
alert(res); //如果存在返回当前key 如果不存在返回-1
</script>