php curl_setopt()的使用说明

以下关于此函数各项使用参数:

bool curl_setopt (int ch, string option, mixed value)

curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。

下列选项的值将被作为长整形使用(在option参数中指定):

CURLOPT_INFILESIZE : 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小。
CURLOPT_VERBOSE : 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值。
CURLOPT_HEADER : 如果你想把一个头包含在输出中,设置这个选项为一个非零值。
CURLOPT_NOPROGRESS : 如果你不会PHP为CURL传输显示一个进程条,设置这个选项为一个非零值。注意:PHP自动设置这个选项为非零值,你应该仅仅为了调试的目的来改变这个选项。
CURLOPT_NOBODY : 如果你不想在输出中包含body部分,设置这个选项为一个非零值。
CURLOPT_FAILONERROR : 如果你想让PHP在发生错误(HTTP代码返回大于等于300)时,不显示,设置这个选项为一人非零值。默认行为是返回一个正常页,忽略代码。
CURLOPT_UPLOAD : 如果你想让PHP为上传做准备,设置这个选项为一个非零值。
CURLOPT_POST : 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。
CURLOPT_FTPLISTONLY : 设置这个选项为非零值,PHP将列出FTP的目录名列表。
CURLOPT_FTPAPPEND : 设置这个选项为一个非零值,PHP将应用远程文件代替覆盖它。
CURLOPT_NETRC : 设置这个选项为一个非零值,PHP将在你的 ~./netrc 文件中查找你要建立连接的远程站点的用户名及密码。 [break]
CURLOPT_FOLLOWLOCATION : 设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做HTTP头的一部分发送(注意这是递归的,PHP将发送形如 “Location: “的头)。
CURLOPT_PUT : 设置这个选项为一个非零值去用HTTP上传一个文件。要上传这个文件必须设置CURLOPT_INFILE和CURLOPT_INFILESIZE选项.
CURLOPT_MUTE : 设置这个选项为一个非零值,PHP对于CURL函数将完全沉默。
CURLOPT_TIMEOUT : 设置一个长整形数,作为最大延续多少秒。
CURLOPT_LOW_SPEED_LIMIT : 设置一个长整形数,控制传送多少字节。
CURLOPT_LOW_SPEED_TIME : 设置一个长整形数,控制多少秒传送CURLOPT_LOW_SPEED_LIMIT规定的字节数。
CURLOPT_RESUME_FROM : 传递一个包含字节偏移地址的长整形参数,(你想转移到的开始表单)。
CURLOPT_SSLVERSION : 传递一个包含SSL版本的长参数。默认PHP将被它自己努力的确定,在更多的安全中你必须手工设置。
CURLOPT_TIMECONDITION : 传递一个长参数,指定怎么处理CURLOPT_TIMEVALUE参数。你可以设置这个参数为TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。这仅用于HTTP。
CURLOPT_TIMEVALUE : 传递一个从1970-1-1开始到现在的秒数。这个时间将被CURLOPT_TIMEVALUE选项作为指定值使用,或被默认TIMECOND_IFMODSINCE使用。

下列选项的值将被作为字符串:

CURLOPT_URL : 这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项。
CURLOPT_USERPWD : 传递一个形如[username]:[password]风格的字符串,作用PHP去连接。
CURLOPT_PROXYUSERPWD : 传递一个形如[username]:[password] 格式的字符串去连接HTTP代理。
CURLOPT_RANGE : 传递一个你想指定的范围。它应该是”X-Y”格式,X或Y是被除外的。HTTP传送同样支持几个间隔,用逗句来分隔(X-Y,N-M)。
CURLOPT_POSTFIELDS : 传递一个作为HTTP “POST”操作的所有数据的字符串。
CURLOPT_REFERER : 在HTTP请求中包含一个”referer”头的字符串。
CURLOPT_USERAGENT : 在HTTP请求中包含一个”user-agent”头的字符串。
CURLOPT_FTPPORT : 传递一个包含被ftp “POST”指令使用的IP地址。这个POST指令告诉远程服务器去连接我们指定的IP地址。这个字符串可以是一个IP地址,一个主机名,一个网络界面名(在UNIX下),或是‘-’(使用系统默认IP地址)。
CURLOPT_COOKIE : 传递一个包含HTTP cookie的头连接。
CURLOPT_SSLCERT : 传递一个包含PEM格式证书的字符串。
CURLOPT_SSLCERTPASSWD : 传递一个包含使用CURLOPT_SSLCERT证书必需的密码。
CURLOPT_COOKIEFILE : 传递一个包含cookie数据的文件的名字的字符串。这个cookie文件可以是Netscape格式,或是堆存在文件中的HTTP风格的头。
CURLOPT_CUSTOMREQUEST : 当进行HTTP请求时,传递一个字符被GET或HEAD使用。为进行DELETE或其它操作是有益的,更Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing or another, more obscure, HTTP request. 注意: 在确认你的服务器支持命令先不要去这样做。下列的选项要求一个文件描述(通过使用fopen()函数获得):
CURLOPT_FILE : 这个文件将是你放置传送的输出文件,默认是STDOUT.
CURLOPT_INFILE : 这个文件是你传送过来的输入文件。
CURLOPT_WRITEHEADER : 这个文件写有你输出的头部分。
CURLOPT_STDERR : 这个文件写有错误而不是stderr。用来获取需要登录的页面的例子,当前做法是每次或许都登录一次,有需要的人再做改进了.


摘几个从别的网站扣过来的例子:
例一:
$cookie_jar = tempnam('./tmp','cookie');
$ch = curl_init(); curl_setopt($ch,CURLOPT_URL, 'http://******');
curl_setopt($ch, CURLOPT_POST, 1);
$request = 'email_address=&password=&action=';
curl_setopt($ch, CURLOPT_POSTFIELDS, $request); //把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); //设定返回的数据是否自动显示
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设定是否显示头信息
curl_setopt($ch, CURLOPT_HEADER, false); //设定是否输出页面内容
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_exec($ch);
curl_close($ch); //get data after login

例二:
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, 'http://*****');
curl_setopt($ch2, CURLOPT_HEADER, false);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_jar);
$orders = curl_exec($ch2);
echo '';

echo strip_tags($orders);
echo '';
curl_close($ch2); 实践证明很稳定:)

例三:
set_time_limit(0);
function _rand() {
$length=26;
$chars = "0123456789abcdefghijklmnopqrstuvwxyz";
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
$string = '';
for($i = 0; $i < $length; $i++) {
$string .= $chars[mt_rand(0, $max)];
}
return $string;
}
$HTTP_SESSION=_rand();
echo $HTTP_SESSION;
$HTTP_Server="www.baidu.com";
$HTTP_URL="/";
$ch = curl_init();
curl_setopt ($ch,CURLOPT_URL,"http://".$HTTP_Server.$HTTP_URL);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
//curl_setopt($ch,CURLOPT_COOKIE,$HTTP_SESSION);
$res = curl_exec($ch);
curl_close ($ch);
print_r($res);

刷论坛代码:
1、抓cookies程序:


$URL="http://www.yoururl.com/bbs/login.asp?action=chk";
//填入论坛的登陆页面地址
$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$URL);

curl_setopt($ch,CURLOPT_REFERER,"http://www.hxfoods.com/bbs/login.asp");
//设置,访问页面的来源地址


curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,'username=→→敢死队→&password=168168');
//分析登陆页面,把用户名,密码分别对应起来
curl_setopt ($ch, CURLOPT_HEADER,true);
//使能显示http头,
curl_exec($ch);
if (curl_errno($ch))
{
print curl_error($ch);
}
else
{
curl_close($ch);
}


2、刷楼了:

set_time_limit(0);
//设置程序执行时间无限制
$i=10000;
//耍10000次
for($j=0;$j<$i;$j++)
{

$URL="http://www.yoururl.com/bbs/savepost.asp";
//这个地址是回复表单里面action的url地址
$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$URL);

curl_setopt($ch,CURLOPT_REFERER,"http://www.hxfoods.com/bbs/dispbbs.asp?boardid=14&replyid=672709&id=127437&page=1&skin=0&Star=53");
//设置来源地址,如果不设置,论坛服务器有可能有验证不允许回复
curl_setopt($ch,CURLOPT_COOKIESESSION,true);
//能保存cookie
curl_setopt($ch,CURLOPT_COOKIE,"DvForum=userid=24122&usercookies=0&userhidden=2&password=w0reu3g775VrY745&userclass=%96%7C&username=%A1%FA%A1%FA%B8%D2%CB%C0%B6%D3%A1%FA&StatUserID=2194783945 ");
//这儿就是设置cookie了
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_NOBODY,1);
//不显示内容,因为有很多论坛回复后要自动跳转。
curl_setopt($ch,CURLOPT_POSTFIELDS,'Body=gfdfgdfgasdfgdfgdfgdfg& followup=672709&RootID=127437&star=58&TotalUseTable=Dv_bbs3& amp;UserName=→→敢死队→&signflag=1&total=65535');
//把你分析的回复表单的参数分别赋值
curl_setopt ($ch, CURLOPT_HEADER,true);
curl_exec($ch);
if (curl_errno($ch))
{
print curl_error($ch);
}
else
{
curl_close($ch);
}

}

curl_close — 关闭一个curl会话
curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数
curl_errno — 返回一个包含当前会话错误信息的数字编号
curl_error — 返回一个包含当前会话错误信息的字符串
curl_exec — 执行一个curl会话
curl_getinfo — 获取一个curl连接资源句柄的信息
curl_init — 初始化一个curl会话
curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close — 关闭一个批处理句柄资源
curl_multi_exec — 解析一个curl批处理句柄
curl_multi_getcontent — 返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的curl的相关传输信息
curl_multi_init — 初始化一个curl批处理句柄资源
curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected"
curl_setopt_array — 以数组的形式为一个curl设置会话参数
curl_setopt — 为一个curl设置会话参数
curl_version — 获取curl相关的版本信息

curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。
curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。


$ch = curl_init("http://www.baidu.com/");
curl_exec($ch);
curl_close($ch);

curl_version()函数的作用是获取curl相关的版本信息,curl_version()函数有一个参数,不清楚是做什么的


print_r(curl_version())

curl_getinfo()函数的作用是获取一个curl连接资源句柄的信息,curl_getinfo()函数有两个参数,第一个参数是curl的资源句柄,第二个参数是下面一些常量:


$ch = curl_init("http://www.baidu.com/");
print_r(curl_getinfo($ch));

可选的常量包括:

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
Result of SSL certification verification requested by setting CURLOPT_SSL_VERIFYPEER

CURLINFO_CONTENT_LENGTH_DOWNLOAD
从Content-Length: field中读取的下载内容长度

CURLINFO_CONTENT_LENGTH_UPLOAD
上传内容大小的说明

CURLINFO_CONTENT_TYPE
下载内容的“Content-type”值,NULL表示服务器没有发送有效的“Content-Type: header”

curl_setopt()函数的作用是为一个curl设置会话参数。curl_setopt_array()函数的作用是以数组的形式为一个curl设置会话参数。


$ch = curl_init();
$fp = fopen("example_homepage.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
$options = array(
CURLOPT_URL => 'http://www.baidu.com/',
CURLOPT_HEADER => false
);
curl_setopt_array($ch, $options);
curl_exec($ch);
curl_close($ch);
fclose($fp);

可设置的参数有:

CURLOPT_AUTOREFERER
自动设置header中的referer信息

CURLOPT_BINARYTRANSFER
在启用CURLOPT_RETURNTRANSFER时候将获取数据返回

CURLOPT_COOKIESESSION
启用时curl会仅仅传递一个session cookie,忽略其他的cookie,默认状况下curl会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie。

CURLOPT_CRLF
启用时将Unix的换行符转换成回车换行符。

CURLOPT_DNS_USE_GLOBAL_CACHE
启用时会启用一个全局的DNS缓存,此项为线程安全的,并且默认为true。

CURLOPT_FAILONERROR
显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息

CURLOPT_FILETIME
启用时会尝试修改远程文档中的信息。结果信息会通过curl_getinfo()函数的CURLINFO_FILETIME选项返回。

CURLOPT_FOLLOWLOCATION
启用时会将服务器服务器返回的“Location:”放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。

CURLOPT_FORBID_REUSE
在完成交互以后强迫断开连接,不能重用。

CURLOPT_FRESH_CONNECT
强制获取一个新的连接,替代缓存中的连接。

CURLOPT_FTP_USE_EPRT
TRUE to use EPRT (and LPRT) when doing active FTP downloads. Use FALSE to disable EPRT and LPRT and use PORT only.
Added in PHP 5.0.0.

CURLOPT_FTP_USE_EPSV
TRUE to first try an EPSV command for FTP transfers before reverting back to PASV. Set to FALSE to disable EPSV.

CURLOPT_FTPAPPEND
TRUE to append to the remote file instead of overwriting it.

CURLOPT_FTPASCII
An alias of CURLOPT_TRANSFERTEXT. Use that instead.

CURLOPT_FTPLISTONLY
TRUE to only list the names of an FTP directory.

CURLOPT_HEADER
启用时会将头文件的信息作为数据流输出。

CURLOPT_HTTPGET
启用时会设置HTTP的method为GET,因为GET是默认是,所以只在被修改的情况下使用。

CURLOPT_HTTPPROXYTUNNEL
启用时会通过HTTP代理来传输。

CURLOPT_MUTE
讲curl函数中所有修改过的参数恢复默认值。

CURLOPT_NETRC
在连接建立以后,访问~/.netrc文件获取用户名和密码信息连接远程站点。

CURLOPT_NOBODY
启用时将不对HTML中的body部分进行输出。

CURLOPT_NOPROGRESS
启用时关闭curl传输的进度条,此项的默认设置为true

CURLOPT_NOSIGNAL
启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认打开。

CURLOPT_POST
启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。

CURLOPT_PUT
启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE

CURLOPT_RETURNTRANSFER
讲curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

CURLOPT_SSL_VERIFYPEER
FALSE to stop cURL from verifying the peer's certificate. Alternate certificates to verify against can be specified with the CURLOPT_CAINFO option or a certificate directory can be specified with the CURLOPT_CAPATH option. CURLOPT_SSL_VERIFYHOST may also need to be TRUE or FALSE if CURLOPT_SSL_VERIFYPEER is disabled (it defaults to 2). TRUE by default as of cURL 7.10. Default bundle installed as of cURL 7.10.

CURLOPT_TRANSFERTEXT
TRUE to use ASCII mode for FTP transfers. For LDAP, it retrieves data in plain text instead of HTML. On Windows systems, it will not set STDOUT to binary mode.

CURLOPT_UNRESTRICTED_AUTH
在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息,即使域名已发生改变。

CURLOPT_UPLOAD
启用时允许文件传输

CURLOPT_VERBOSE
启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中

CURLOPT_BUFFERSIZE
每次获取的数据中读入缓存的大小,这个值每次都会被填满。

CURLOPT_CLOSEPOLICY
不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST,还存在另外三个,但是curl暂时还不支持。.

CURLOPT_CONNECTTIMEOUT
在发起连接前等待的时间,如果设置为0,则不等待。

CURLOPT_DNS_CACHE_TIMEOUT
设置在内存中保存DNS信息的时间,默认为120秒。

CURLOPT_FTPSSLAUTH
The FTP authentication method (when is activated): CURLFTPAUTH_SSL (try SSL first), CURLFTPAUTH_TLS (try TLS first), or CURLFTPAUTH_DEFAULT (let cURL decide).

CURLOPT_HTTP_VERSION
设置curl使用的HTTP协议,CURL_HTTP_VERSION_NONE(让curl自己判断),CURL_HTTP_VERSION_1_0(HTTP/1.0),CURL_HTTP_VERSION_1_1(HTTP/1.1)

CURLOPT_HTTPAUTH
使用的HTTP验证方法,可选的值 有:CURLAUTH_BASIC,CURLAUTH_DIGEST,CURLAUTH_GSSNEGOTIATE,CURLAUTH_NTLM,CURLAUTH_ANY,CURLAUTH_ANYSAFE, 可以使用“|”操作符分隔多个值,curl让服务器选择一个支持最好的值,CURLAUTH_ANY等价于CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM,CURLAUTH_ANYSAFE等价于CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM

CURLOPT_INFILESIZE
设定上传文件的大小

CURLOPT_LOW_SPEED_LIMIT
当传输速度小于CURLOPT_LOW_SPEED_LIMIT时,PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。

CURLOPT_LOW_SPEED_TIME
The number of seconds the transfer should be below CURLOPT_LOW_SPEED_LIMIT for PHP to consider the transfer too slow and abort.
当传输速度小于CURLOPT_LOW_SPEED_LIMIT时,PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。

CURLOPT_MAXCONNECTS
允许的最大连接数量,超过是会通过CURLOPT_CLOSEPOLICY决定应该停止哪些连接

CURLOPT_MAXREDIRS
指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的。

CURLOPT_PORT
一个可选的用来指定连接端口的量

CURLOPT_PROXYAUTH
The HTTP authentication method(s) to use for the proxy connection. Use the same bitmasks as described in CURLOPT_HTTPAUTH. For proxy authentication, only CURLAUTH_BASIC and CURLAUTH_NTLM are currently supported.

CURLOPT_PROXYPORT
The port number of the proxy to connect to. This port number can also be set in CURLOPT_PROXY.

CURLOPT_PROXYTYPE
Either CURLPROXY_HTTP (default) or CURLPROXY_SOCKS5.

CURLOPT_RESUME_FROM
在恢复传输时传递一个字节偏移量(用来断点续传)

CURLOPT_SSL_VERIFYHOST
1 to check the existence of a common name in the SSL peer certificate.
2 to check the existence of a common name and also verify that it matches the hostname provided.

CURLOPT_SSLVERSION
The SSL version (2 or 3) to use. By default PHP will try to determine this itself, although in some cases this must be set manually.

CURLOPT_TIMECONDITION
如果在CURLOPT_TIMEVALUE指定的某个时间以后被编辑过,则使用CURL_TIMECOND_IFMODSINCE返回页面,如果没有被修 改过,并且CURLOPT_HEADER为true,则返回一个"304 Not Modified"的header,CURLOPT_HEADER为false,则使用CURL_TIMECOND_ISUNMODSINCE,默认值为 CURL_TIMECOND_IFMODSINCE

CURLOPT_TIMEOUT
设置curl允许执行的最长秒数

CURLOPT_TIMEVALUE
设置一个CURLOPT_TIMECONDITION使用的时间戳,在默认状态下使用的是CURL_TIMECOND_IFMODSINCE

CURLOPT_CAINFO
The name of a file holding one or more certificates to verify the peer with. This only makes sense when used in combination with CURLOPT_SSL_VERIFYPEER.

CURLOPT_CAPATH
A directory that holds multiple CA certificates. Use this option alongside CURLOPT_SSL_VERIFYPEER.

CURLOPT_COOKIE
设定HTTP请求中“Set-Cookie:”部分的内容。

CURLOPT_COOKIEFILE
包含cookie信息的文件名称,这个cookie文件可以是Netscape格式或者HTTP风格的header信息。

CURLOPT_COOKIEJAR
连接关闭以后,存放cookie信息的文件名称

CURLOPT_CUSTOMREQUEST
A custom request method to use instead of "GET" or "HEAD" when doing a HTTP request. This is useful for doing "DELETE" or other, more obscure HTTP requests. Valid values are things like "GET", "POST", "CONNECT" and so on; i.e. Do not enter a whole HTTP request line here. For instance, entering "GET /index.html HTTP/1.0\r\n\r\n" would be incorrect.
Note: Don't do this without making sure the server supports the custom request method first.

CURLOPT_EGBSOCKET
Like CURLOPT_RANDOM_FILE, except a filename to an Entropy Gathering Daemon socket.

CURLOPT_ENCODING
header中“Accept-Encoding: ”部分的内容,支持的编码格式为:"identity","deflate","gzip"。如果设置为空字符串,则表示支持所有的编码格式

CURLOPT_FTPPORT
The value which will be used to get the IP address to use for the FTP "POST" instruction. The "POST" instruction tells the remote server to connect to our specified IP address. The string may be a plain IP address, a hostname, a network interface name (under Unix), or just a plain '-' to use the systems default IP address.

CURLOPT_INTERFACE
在外部网络接口中使用的名称,可以是一个接口名,IP或者主机名。

CURLOPT_KRB4LEVEL
KRB4(Kerberos 4)安全级别的设置,可以是一下几个值之一:"clear","safe","confidential","private"。默认的值 为"private",设置为null的时候表示禁用KRB4,现在KRB4安全仅能在FTP传输中使用。

CURLOPT_POSTFIELDS
在HTTP中的“POST”操作。如果要传送一个文件,需要一个@开头的文件名

CURLOPT_PROXY
设置通过的HTTP代理服务器

CURLOPT_PROXYUSERPWD
连接到代理服务器的,格式为“[username]:[password]”的用户名和密码。

CURLOPT_RANDOM_FILE
设定存放SSL用到的随机数种子的文件名称

CURLOPT_RANGE
设置HTTP传输范围,可以用“X-Y”的形式设置一个传输区间,如果有多个HTTP传输,则使用逗号分隔多个值,形如:"X-Y,N-M"。

CURLOPT_REFERER
设置header中"Referer: " 部分的值。

CURLOPT_SSL_CIPHER_LIST
A list of ciphers to use for SSL. For example, RC4-SHA and TLSv1 are valid cipher lists.

CURLOPT_SSLCERT
传递一个包含PEM格式证书的字符串。

CURLOPT_SSLCERTPASSWD
传递一个包含使用CURLOPT_SSLCERT证书必需的密码。

CURLOPT_SSLCERTTYPE
The format of the certificate. Supported formats are "PEM" (default), "DER", and "ENG".

CURLOPT_SSLENGINE
The identifier for the crypto engine of the private SSL key specified in CURLOPT_SSLKEY.

CURLOPT_SSLENGINE_DEFAULT
The identifier for the crypto engine used for asymmetric crypto operations.

CURLOPT_SSLKEY
The name of a file containing a private SSL key.

CURLOPT_SSLKEYPASSWD
The secret password needed to use the private SSL key specified in CURLOPT_SSLKEY.
Note: Since this option contains a sensitive password, remember to keep the PHP script it is contained within safe.

CURLOPT_SSLKEYTYPE
The key type of the private SSL key specified in CURLOPT_SSLKEY. Supported key types are "PEM" (default), "DER", and "ENG".

CURLOPT_URL
需要获取的URL地址,也可以在PHP的curl_init()函数中设置。

CURLOPT_USERAGENT
在HTTP请求中包含一个”user-agent”头的字符串。

CURLOPT_USERPWD
传递一个连接中需要的用户名和密码,格式为:“[username]:[password]”。

CURLOPT_HTTP200ALIASES
设置不再以error的形式来处理HTTP 200的响应,格式为一个数组。

CURLOPT_HTTPHEADER
设置一个header中传输内容的数组。

CURLOPT_POSTQUOTE
An array of FTP commands to execute on the server after the FTP request has been performed.

CURLOPT_QUOTE
An array of FTP commands to execute on the server prior to the FTP request.

CURLOPT_FILE
设置输出文件的位置,值是一个资源类型,默认为STDOUT (浏览器)。

CURLOPT_INFILE
在上传文件的时候需要读取的文件地址,值是一个资源类型。

CURLOPT_STDERR
设置一个错误输出地址,值是一个资源类型,取代默认的STDERR。

CURLOPT_WRITEHEADER
设置header部分内容的写入的文件地址,值是一个资源类型。

CURLOPT_HEADERFUNCTION
设置一个回调函数,这个函数有两个参数,第一个是curl的资源句柄,第二个是输出的header数据。header数据的输出必须依赖这个函数,返回已写入的数据大小。

CURLOPT_PASSWDFUNCTION
设置一个回调函数,有三个参数,第一个是curl的资源句柄,第二个是一个密码提示符,第三个参数是密码长度允许的最大值。返回密码的值。

CURLOPT_READFUNCTION
设置一个回调函数,有两个参数,第一个是curl的资源句柄,第二个是读取到的数据。数据读取必须依赖这个函数。返回读取数据的大小,比如0或者EOF。

CURLOPT_WRITEFUNCTION
设置一个回调函数,有两个参数,第一个是curl的资源句柄,第二个是写入的数据。数据写入必须依赖这个函数。返回精确的已写入数据的大小

curl_copy_handle()函数的作用是拷贝一个curl连接资源的所有内容和参数


$ch = curl_init("http://www.baidu.com/");
$another = curl_copy_handle($ch);
curl_exec($another);
curl_close($another);

curl_error()函数的作用是返回一个包含当前会话错误信息的字符串。
curl_errno()函数的作用是返回一个包含当前会话错误信息的数字编号。

curl_multi_init()函数的作用是初始化一个curl批处理句柄资源。
curl_multi_add_handle()函数的作用是向curl批处理会话中添加单独的curl句柄资源。curl_multi_add_handle()函数有两个参数,第一个参数表示一个curl批处理句柄资源,第二个参数表示一个单独的curl句柄资源。
curl_multi_exec()函数的作用是解析一个curl批处理句柄,curl_multi_exec()函数有两个参数,第一个参数表示一个批处理句柄资源,第二个参数是一个引用值的参数,表示剩余需要处理的单个的curl句柄资源数量。
curl_multi_remove_handle()函数表示移除curl批处理句柄资源中的某个句柄资源,curl_multi_remove_handle()函数有两个参数,第一个参数表示一个curl批处理句柄资源,第二个参数表示一个单独的curl句柄资源。
curl_multi_close()函数的作用是关闭一个批处理句柄资源。


$ch1 = curl_init();
$ch2 = curl_init();

curl_setopt($ch1, CURLOPT_URL, "http://www.baidu.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.google.com/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

$mh = curl_multi_init();

curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

do {
curl_multi_exec($mh,$flag);
} while ($flag > 0);

curl_multi_remove_handle($mh,$ch1);
curl_multi_remove_handle($mh,$ch2);
curl_multi_close($mh);

curl_multi_getcontent()函数的作用是在设置了CURLOPT_RETURNTRANSFER的情况下,返回获取的输出的文本流。

curl_multi_info_read()函数的作用是获取当前解析的curl的相关传输信息。

curl_multi_select()
Get all the sockets associated with the cURL extension, which can then be "selected"
 


smarteng 发布于 2009-10-30 02:04

刚刚看到的,转载一下

发信人: bigyuyu (生命不息,奋斗不止), 信区: Joke
标  题: 刚刚看到的,转载一下
发信站: 水木社区 (Thu Oct 29 15:55:12 2009), 站内

1 、一次在清华食堂吃饭,对面坐了两个女生,听到一位对另一位说:"我还没吃饱,想再吃一点儿。"
另一位说:'你要什么?我去买。"
前一女生说: "就是那种扇形锐角饼,你帮再我买两块儿。"
我暗想:清华女生确实不一样,我们平时只是称那种饼为三角饼
分析:这样的女人不敢娶做老婆,结婚以后叫LG吃饭:喂,那个不规则多面体过来!

3、清华的教授更牛的说,俺有一次去校医院看眼睛,就听前边儿一个老师在跟医生描述症状"厄……嗯……就是那个物体跟它的象不能重叠在一起……"
偶们大眼儿瞪小眼儿了n久大夫阿姨突然顿悟了:"您是说看东西有重影儿吧?"
sigh……崇拜良久
[break]
5、第一次去十食堂吃龙须面,之前只看过别人吃得香喷喷,不知道它叫什么名字,就跟那个师傅说:" 师傅,那种面条直径比较细,大概不超过2毫米,然后还放了两个二分之一的煮熟的鸡蛋,汤里还有……" 我正想说"绿色的叶子状的东东"
师傅就说:" 打卡吧!"
可我一看就一块五,感觉龙须面不应该这么便宜,就重复了一下:"师傅,我要的是那种……"
"行了行了,龙须面嘛,我听懂了!"

6、以下是俺们那年献血的时候,某位仁兄同医生的对话,呵呵。
大夫:同学,请把胳膊弯一下。
同学:弯曲角度是多少???
大夫: ......
大夫:同学,请把手一握一放。
同学:频率是多少??

8、偶一次指着西瓜说:"要一半的一半...的一半..."
(还很是思考了一会儿,怕少说一个,没钱付账的说)
师傅挥刀曰:"八分之一是吧?"
不知道师傅有没有受打击。反正偶是受打击了-_-!

9、在南方某大学,学生去食堂打饭,想吃包子,就跟师傅说:来四个包子。
师傅问:10个?
答:不,是4个?
问:10个?
答:4个!是4个!
师傅问:HOW MANY?
答:FOUR!
师傅:这不结了吗!
 


smarteng 发布于 2009-10-29 09:33

男子用口技 冒充公交刷卡声被识破

男子用口技 冒充公交刷卡声被识破
2007年10月30日
作者:
  27日上午11时15分许,在武昌阅马场公交站,一辆1路电车由武昌开往汉口。当车停靠在公交站等待乘客时,一名年约20岁的小伙子上车后,神态自若地将钱包往刷卡机前一伸。“嘀——”的一声响后,小伙子收回钱包就往车厢里面走。

  公交司机熊大顺叫住了他,要求其将钱包内的公交IC卡拿出来看一下。“我已经刷卡了,你还

 
要看什么?”小伙子烦了。

  电车安全员说:“我刚才清楚地看见你伸钱包的时候,IC卡机上根本就没有显示。”

  在证据面前,小伙子默默投币,然后下车。(武汉晨报)


smarteng 发布于 2009-10-29 01:33

出生之前B装人,出生之后人装B

出生之前B装人,出生之后人装B


smarteng 发布于 2009-10-28 12:38

PHP开发安全建议20则

1.时刻升级你的php版本
  正如其它编程语言一样,PHP的缺陷也会逐渐暴露出来。使用和及时更新最新的php版本将有助于你保证应用程序的安全,高效和稳定。

  2.朦胧的安全根本就不是安全,同时你也不想泄露关于你的网站的信息。以下的建议看似简单,实则在现实生活中很容易被人们忽视。

  确保在你的网站上不展现错误以及关于你网站潜在的信息泄露

  只要在你的产品服务器的php.ini中如下设置即可:display_errors = Off,这样就可以有效防范信息泄露从而给防止黑客知晓关于你的系统结构的的信息。一般的默认设置是display_errors = On.[break]

  3.有安全意识固然不错,但这是远远不够的。

  开发者在面临安全问题的时候一定要有警惕之心。即使你不能单独处理这一问题。只要是应用程序都不可避免的存在大量的安全隐患,只不过是没有爆发出来而已。第三方安全软件有助于找出你没有注意到的安全缺陷。

  作为网站开发人员,手头上一定要有专门的工具帮助你找出应用程序的缺陷。Chorizo可以帮助你自动扫描代码。诸如PHPSecInfo一样的程序帮助你确保配置环境的安全。

  使用诸如此类的扫猫工具并不足以保证100%的安全。尽管如此,仍然是组安全策略中很重要的一部分。一定是使用值得信赖的开发商帮助你构建和维护安全的应用程序。

  4.模糊的安全根本就不是安全,但模糊安全策略必不可少。

  尽管如此,实际当你恰当的使用模糊安全策略的时候也不是为一个好的选择。那些心怀不轨的人实际上就是想把事情弄的很复杂。

  装有机密信息的文件夹和文件不要使用默认的名称。

  不要使用使用艰深晦涩的文件名保证你的应用程序的安全。应该不断的检查网络许可,使用测试工具测试漏洞,利用网络日志监视异常行为。当你设计应用程序和网站的时候,不要让坏人轻易的如愿以偿。文件名和目录名不要使用默认的或是很简单的名称。

  5.php是一个永恒的使命,它要求程序员跳出程序的参数思考问题。仅仅思考“我所设计的东西会按照我的想法一样吗”,你还要思考,“其他人会利用我设计的东西干些什么,我允许他们这样做吗”。以下的安全建议是所有的程序员都应该知道的。

  永远不要相信用户

  这样说也许是有点悲观,但是用户确实就是恶魔。用户只不过是想找出你的程序的缺陷。一旦你自己降低安全要求,并且认为“我只不过是卖点小玩意,客户能有什么能耐呢”,这时候你已经输掉了这场战争。

  过滤入流量,远离出流量(FIEO)

  确实,FIEO是所有的程序员都应该牢记的安全咒语。

  6.在PHP中编写安全程序不仅仅是编写一长串PHP代码就够了。

      许多程序使用数据库或是类似的东西。很多情况下,导致整个应用程序漏洞的就是在构建SQL代码的时候。以下有一条简单的解决之道。

  处理SQL字符串中的数字的时候,一定要计算。

  即使你是在过滤入流量,一个简单而行之有效的安全策略就是把所有的数值都放到SQL报表中。我们以这个代码为例子。

      $myId = filter_var($_GET['id'],FILTER_VALIDATE_INT);
  $sql = 'SELECT * FROM table WHERE id = '.$myId;


  尽管你使用的是PHP 5.2版本内置的php过滤器,你还可以有其它的选择,试一下下面这个:

      $myId = filter_var($_GET['id'],FILTER_VALIDATE_INT );
  $sql = 'SELECT * FROM table WHERE id = '.(int)$myId;


  最后的变量就是变成一个int就会让所有的可以变量远离MySQL.上面的例子故意简化了。在实际情况中,代码更加复杂,产生错误的风险也更大。通过使用最后的计算构建一个精选的报表,这样你就提高了应用程序的安全等级。

  7.当你使用session_regenerate_id()来阻止session固定的时候,最好是将之前的session ID移除。

  实例脚本:

<?php
session_start();
$_SESSION['data'] = time();
session_regenerate_id();
?>


      检测URL以及/tmp路径

sess_82c6980017e100277a63983142fd454c
sess_a4bab88e6dfa6e900ade21e3fbd27a53


      再次检测

sess_984c5230acca90b5a75eddb89bb48354
sess_a4bab88e6dfa6e900ade21e3fbd27a53
sess_82c6980017e100277a63983142fd454c


  然后你可以看到如下情况

      sess_984c5230acca90b5a75eddb89bb48354
  sess_a4bab88e6dfa6e900ade21e3fbd27a53
  sess_82c6980017e100277a63983142fd454c
  sess_dd88c05b724d80b30c90309847f2e919


  这些session仍然很活跃。当重新生成ID的时候移除它们采用如下代码:

<?php
session_start();
$_SESSION['data'] = time();
session_regenerate_id(true);
?>


  如果你正在使用自己的session处理器的话,这可能导致你的destroy callback功能被激活。

  8.使用php安全主题,实际上不止一种方法可以完成任务。在很多情况下,战术的重组可以达到最好的安全效果。我们一直在谈论信息的过滤,我们还需要警惕来自于用户的验证信息。这是在日常的php应用中需要加以注意的。

  确认用户的输入信息

  代码实例:

<?php
$myFile = filter_var($_GET['file'], FILTER_SANITIZE_STRING);
include($myFile);
?>


  点击http://example.com/file.php?file=home.php可能会导致你的脚本包含在你的目前的目录中的文件home.php。但是如果有人请求http://example.com/file.php?file=badcode.php的话,你就会置身于执行代码的危险中,或是你不想执行的代码被执行。

  不要仅仅依靠file_exists(). 因为本地文件并不意味着这是一个正确的文件甚至那根本就不是你的文件。不要让黑客轻易的执行代码。

  为了保证安全,记住一定要过滤和确认:

<?php
// filter
$myFile = filter_var($_GET['file'], FILTER_SANITIZE_STRING);
// Then validate
$valid = array('home.php', 'about.php');
If (!in_array($myFile, $valid)) {
            die('Leave, evil hacker');
}
include($myFile);
?>


  9.有时最简单的也就是最安全的。以下的建议很简单,但是我们很惊讶在现实生活中很少有人理解以及使用。

  不要将敏感信息放于网上

  思考一下下面这个目录结构:

      /htdocs
  /includes
  /images
  /js


  如果你将你的数据库的信任状存储于一个名为db.inc的文件中,然后将其放于这一目录之下,很可能就有人下载这一文件夹名下的信息,只要他们访问http://example.com/includes/db.inc.站点,因为绝大多数的网站服务器并不知道如何处理这一.inc文件,如果有访问请求的话,它们直接被认为是纯文本。后果是可怕的。如果你存储信任状的文件使用的是非.php后缀名的话并且位于你的网络服务器的根目录之下,很可能你的信息正在泄露。

  解决方法很简单。将所有的敏感信息置于网络服务器的根目录之外。现在也有很多专家提倡把绝大多数的php代码放于网络服务器根目录之外。因为php代码不限于同一个限制,你可以在根目录的同一文件层次之下建立一个目录,然后将你的所有的机密信息和代码放在那。

      /phpinc
  /includes
  /htdocs
  /images
  /js


  10.即时所有的事情都做的完美无缺,你构建的php代码仍然存在安全隐患。安全需要永恒的警惕之心。有一件事情你需要时刻保持注意,那就是依赖入流量发送邮件的脚本。许多使用php编写的应用程序使用内置的mail()功能来回应邮件触发的用户流量。

  不要盲目的使用信息发送邮件

  正如我们在其它的关于php的安全建议中谈到的一样,你要确保适当的过滤和确认用户的输入。如果你没有恰当的过滤入流的话,很可能就有人在你没有注意之前使用电子邮件注入以及发送成千的垃圾邮件。

  11.我们都认为用户既是我们开发的程序是天使也是魔鬼。一方面,要是没有用户的话也就不会存在安全问题了。再者,要是没有用户,我们就没有必要开发应用程序了。因此我们认为不能让客户流失。这就是说必须要他们知晓相关的安全问题。我们可以采取如下措施:

  最少权限原则

  只给予用户最低层次的许可

  这是最基本的编程原则,在绝大多数的Unix中可以看到。处理unix中的用户和资源的时候,用户清楚无误的知道自己的访问权限。用户的访问权限只足以访问最基本的资源。我们在开发应用程序的时候也可以借鉴这一概念。

  许多现代的php构架都使用了这一概念或是授权访问控制。在Zend构架中,授权是由Zend_Auth处理,但是访问控制是由另外一个Zend_Acl处理的。

  不管你使用哪一个结构,一个好的安全策略就是在网页或图片上设置访问限制。不管什么时候,要将用户的访问权限限制到最低程度。

  12.我们已经谈论过过滤,确认以及再次谈论过滤。过滤应用程序的输入是一个很重要的概念,它应该先于很多安全策略之前执行。尽管如此,即使你执行了良好的过滤制度和确认制度,这并不意味这你可以高枕无忧了。在编程的整个过程都必须谨记安全问题。

  过滤输入让一些程序开发人员产生了安全错觉。他们武断的认为既然已经采取了过滤措施,就没有必要担心安全问题了。在一些简单的程序中可能确实是没有什么问题,但是在一些复杂的程序中就不然了,你要知道使用这些输入是干什么的。在用户在eval()命令使用输入的时候的时候就可以看出。以下是一些建议:

  在使用eval()之前认真思考一下

  通过在eval()中使用用户输入参数,你很可能给恶意用户访问服务器开了后门。即使你的操作界面仅仅允许他们选择已经设置好的界面,使用你的脚本哄骗,那么你的脚本很可能就会被别有用心之人用来即时执行罪恶的行当。

  尽量少使用eval()。当你不得不使用的时候,一定要保证过滤和确认输入的有效性。如果还有其它选择的话,就使用另外的方法。

  13.安全要常记心中,而不是偶然为之。它和代码一样为你的程序增彩。尽管如此,你还需要实时监控你的产品环境。那就是我们为什么要选择正确的工具的原因。我之前提过PHPSecInfo,这一工具足以保证自身的安全。

  PHPSecInfo可以有效的监视你的产品环境。

  PHPSecInfo提供与phpinfo()相似的功能,它可以提供关于php环境的安全信息,并且提供改进建议。但是它并不是安全开发技术的替代品,也不提供任何形式的代码或是程序监测,但是在多层次安全策略中很有效。

  对于安全建议,单靠自身是远远不够的。恰当的组合可以发挥很大的效用。

  14.几乎所有的应用程序都在使用网络技术的后端用户上运行php,因为这是前期工作。许多开发人员在php安全上苦思冥想,却不注意前期的开发工作。以下就是关于在构建HTML和java脚本时应该考虑的一些问题。

  任何位于cookie中的数据都可能被其他人看到——将其降低到最低限度

  现在的网络很令人失望,坏人太多。他们等着你的应用程序的信息泄露然后利用这些敏感信息获取利益。评估应用程序安全的时候一定要综合考虑。当你在前期输入数据的时候,这尤其重要。

  15.作为开发者,很多人做事很混乱。我曾经做过无数的项目,很多人将大量的测试文件到处乱放。(info.php, test.php, doMe.php,等等)。这些信息如果被别有用心者获得,就会泄露关于系统的有价值的信息。

  建议

  不要忘记清除临时的系统诊断文件

  你很可能会感到后悔,如果你花费大量的时间保护你的应用程序而忘记了info.php,test.php 中的“quick piece of code”可能会泄露关于你的系统的危险信息。不要助纣为戾。

  16保证你现在使用的构架实时更新

  如果你是在一台临时的机器上工作的话,这尤其重要。考虑谁来维持折合站点是很重要的,如果安全补丁是由第三方文件提供的。

  一般来说,这些站点位于一个共享的主机站点上,这就意味着提供商负责维护php,数据库系统,网络服务器等等的实时更新——但是他们很可能不会维护你所安装的构架。

  使用构架是一个不错的主意——并不是因为它省去了你很多麻烦,更因为它会及时处理相关的安全隐患。

  另一方面还意味着这些构架中的网络安全问题都会被记录下来——也就是说黑客可以寻找出仍在使用的构建的老版本,然后轻易的发动攻击。

  现在很多站点使用老掉牙的文件——只是因为没有专人负责升级。即使不是你为超额服务器流量买单——实际上你的邮箱收到了大量的垃圾邮件。

  17.应用程序的安全不是一个所有的措施都失效的情况。不是事后可以处理的。正如我们前面所提到,应用程序的安全没有一个万全的解决之道。安全贯穿于设计的初始,代码编写,测试以及产品成功开发之后的整个阶段。

  一位著名的php安全专家曾经给出如下的安全建议:

  ● 安全是一种措施,而不是特征。

  ● 安全必须与投入之间寻求平衡

  ● 安全需要与实用性之间寻找到平衡点

  ● 安全是设计的一部分

  以上对于徘徊在安全设计织之外的人是很好的建议。

  18.当你允许用户上传文件,这就意味着你的系统有风险。要限制允许上传的文件类型。不要依赖黑名单策略。

  举个例子来说,黑名单不允许上传.php文件,这确实是一个不赖的主意,要是有人上传.htaccess文件的话,黑名单就失去了效用。将恶意代码置于这一文件之中实际上黑名单在客观上帮助了那些居心叵测之人。

  AddType应用程序/x-httpd-php .php .htm

  它们现在可以上传任何形式的带有php代码的.htm文件,然后就在你的系统内胡作非为。

  例如:

<?php
echo system("locate config");
?>


  很有可能上述代码会提供攻击者位于服务器之内的配置名。这种攻击的可能性是永恒的,仅仅是因为你的服务器未保护的一个上传。

  一定要重视文件上传的问题,确保使用白名单政策。确保上传文件的形式是所允许的文件类型。有几种方式可以实现这一目的,最简单的就是检查上传文件的扩展名。这样那些不适当的文件扩展名就会被排除。但是,这不是最安全的做法。

  要想实现更加安全的监管,检查PECL扩展名,FileInfo。FileInfo检查 文件的内容并且根据特定的字节顺序猜测内容形式。将FileInfo与白名单政策一起使用的话会在文件上传的时候更加安全的保护你的系统。

  19.有时最好的应用程序安全策略就是不要断开服务器与网络的的连接。但是现实生活中是行不通的。考虑安全问题的时候,软件和硬件同样重要。

  最安全的应用程序就是不与外界相联系

  正如前面所说,这在现实中根本就行不通。但是你可以选择那些服务器可以与外部网络相联系,那些需要布置在防火墙之内。此外还要考虑,防火墙之外的服务器如何与之内的服务器沟通的问题。

  Session劫持,XSS, 和XSRF都是开发者必须面临的挑战,我并不是危言耸听。确实在很多情况下,这就意味着末日。对于绝大多数的黑客来说,很容易突破的技术数据库。开发人员面临的最严重的问题就是程序被劫持,数据库受到威胁,以及用户的信任信息在网上的传播。

  一个简单的方法就是把数据库服务器移到防火墙之后,这样就可以限制对其的访问。一旦你认识这一问题,你发现还有其它的方法帮助你保护整个系统。

  20.最后一条建议,推荐读如下科目:

      《Essential PHP Security》

      《Pro PHP Security》

      《Professional PHP5 Security》

      《php|architect's Guide to PHP Security》
 


smarteng 发布于 2009-10-28 03:17

Apache配置的安全方法20则

声明:关于安全的事情没有保证的或者绝对的。这些建议可以让你的服务器更安全,但不要认为遵循这些建议后你的服务器就理所当然是安全的。另外,在这些建议中有的建议可能会降低服务器性能或者因为你的环境引起问题。我建议所作的任何改变是否适合你的需求完全由你决定。换句话说,那是你的风险。


smarteng 发布于 2009-10-28 03:14

php5面向对象简介

php5面向对象简介,一、接口(interface)二、抽象类 (abstract)三、instanceof关键词四、static关键字五、const六、魔术方法 Magic Methods七、对象克隆八、反射Reflection
下面是详解~ 


smarteng 发布于 2009-10-28 03:11

MySQL中存储引擎各自的一些特点

MySQL中的四种存储引擎都有各自适用的环境,这取决于它们独有的一些特征。主要体现在性能、事务、并发控制、参照完整性、缓存、 故障恢复,备份及回存等几个方面


smarteng 发布于 2009-10-28 03:07

注重实效的程序员 | 程序员修炼之道

注重实效的程序员 | 程序员修炼之道
care about your craft 
除非你在乎能否漂亮地开发出软件,否则其它事情都是没有意义的。


smarteng 发布于 2009-10-28 03:05

规范的robots.txt写法

规范的robots.txt写法要规范

网站管理者似乎对robots.txt并没有引起多大重视,应一些朋友之请求,今天想通过这篇文章来简单谈一下robots.txt的写作。

robots.txt基本介绍

robots.txt是一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,

或者指定搜索引擎只收录指定的内容。

当一个搜索机器人(有的叫搜索蜘蛛)访问一个站点时,它会首先检查该站点根目录下是否存在

robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,

那么搜索机器人就沿着链接抓取。

另外,robots.txt必须放置在一个站点的根目录下,而且文件名必须全部小写。

robots.txt写作语法[break]

首先,我们来看一个robots.txt范例:http://www.beidou365.cn/robots.txt

访问以上具体地址,我们可以看到robots.txt的具体内容如下:

# Robots.txt file from http://www.beidou365.cn
# All robots will spider the domain

User-agent: *
Disallow:

以上文本表达的意思是允许所有的搜索机器人访问www.beidou365.cn站点下的所有文件。

具体语法分析:其中#后面文字为说明信息;User-agent:后面为搜索机器人的名称,后面如果是*,则泛

指所有的搜索机器人;Disallow:后面为不允许访问的文件目录。

下面,我将列举一些robots.txt的具体用法:

允许所有的robot访问

User-agent: *
Disallow:

或者也可以建一个空文件 “/robots.txt” file

禁止所有搜索引擎访问网站的任何部分

User-agent: *
Disallow: /

禁止所有搜索引擎访问网站的几个部分(下例中的01、02、03目录)

User-agent: *
Disallow: /01/
Disallow: /02/
Disallow: /03/

禁止某个搜索引擎的访问(下例中的BadBot)

User-agent: BadBot
Disallow: /

只允许某个搜索引擎的访问(下例中的Crawler)

User-agent: Crawler
Disallow:

User-agent: *
Disallow: /

另外,我觉得有必要进行拓展说明,对robots meta进行一些介绍:

Robots META标签则主要是针对一个个具体的页面。和其他的META标签(如使用的语言、页面的描述、关

键词等)一样,Robots META标签也是放在页面的<head></head>中,专门用来告诉搜索引擎ROBOTS

如何抓取该页的内容。

Robots META标签的写法:

Robots META标签中没有大小写之分,name=”Robots”表示所有的搜索引擎,可以针对某个具体搜索引

擎写为name=”BaiduSpider”。 content部分有四个指令选项:index、noindex、follow、nofollow,

指令间以“,”分隔。

INDEX 指令告诉搜索机器人抓取该页面;

FOLLOW 指令表示搜索机器人可以沿着该页面上的链接继续抓取下去;

Robots Meta标签的缺省值是INDEX和FOLLOW,只有inktomi除外,对于它,缺省值是INDEX,NOFOLLOW。

这样,一共有四种组合:

<META NAME=”ROBOTS” CONTENT=”INDEX,FOLLOW”>
<META NAME=”ROBOTS” CONTENT=”NOINDEX,FOLLOW”>
<META NAME=”ROBOTS” CONTENT=”INDEX,NOFOLLOW”>
<META NAME=”ROBOTS” CONTENT=”NOINDEX,NOFOLLOW”>

其中

<META NAME=”ROBOTS” CONTENT=”INDEX,FOLLOW”>可以写成<META NAME=”ROBOTS” CONTENT=”

ALL”>;

<META NAME=”ROBOTS” CONTENT=”NOINDEX,NOFOLLOW”>可以写成<META NAME=”ROBOTS”

CONTENT=”NONE”>

目前看来,绝大多数的搜索引擎机器人都遵守robots.txt的规则,而对于Robots META标签,目前支持的

并不多,但是正在逐渐增加,如著名搜索引擎GOOGLE就完全支持,而且GOOGLE还增加了一个指令

“archive”,可以限制GOOGLE是否保留网页快照。例如:

<META NAME=”googlebot” CONTENT=”index,follow,noarchive”>


smarteng 发布于 2009-10-28 03:00

《don't make me think》

指导原则
==============================================
1.别让我思考
--krug可用性第一定律


Finch clearly presents the information about the site and gives visitors a choice of options without overcrowding them with unnecessary content.
根据krug可用性原则的第一条,网页必须是显而易见的、不言自明的。当你建设一个网站的时候,你的任务就是排除疑问,不能让用户需要有意识地判断、正面反面反复思考才能决定。

首先,你的网站并不是那么容易被找到,而访问者们也不知道另一个类似的网站。
其次,从头开始的感觉往往不是那么令人向往。
再次,大多数人会花比我们想象中少得多的时间来浏览网页。

因此,如果要让网页有效,它们必须在用户第一眼看到时将自己展示出来,做到不言而喻的网页。

2.我们实际上是如何使用web的[break]
--扫描,满意即可,勉强应付

网络使用情况的三个事实:
一,我们不是阅读,而是扫描;
我们忙;我们知道自己不必阅读所有内容;我们善于扫描。
二,我们不作最佳选择,而是满意即可;
我们忙;猜错了没什么严重后果;对选择进行权衡并不改善我们的机会;猜测更有意思。
三,我们不追根究底,而是勉强应付。
这对我们并不重要;如果发现某个事务能用,我们会一直用它。

3.广告牌设计101法则
--为扫描设计,不为阅读设计

建立清楚的视觉层次
越重要的部分越突出
逻辑上相关的部分在视觉上也相关
逻辑上包含的部分在视觉上进行嵌套

习惯用法是你的好帮手
把页面划成明确定义的区域

明显标识可以点击的地方
降低视觉噪音(眼花缭乱;背景噪音)

4.Krug可用性第二定律:
点击多少次都没关系,只要每次点击都是无须思考、明确无误的选择。
准则:三次无须思考、明确无误的点击相当于一次需要思考的点击

5.省略不必要的文字(定律三)
--不要在web上写作的艺术
几个好处:
可以降低页面的噪声;
让有用的内容更加突出;
让页面更简短;

必须消灭欢迎词
必须消灭指示文字

必须正确处理的几个方面
===============================================
6.街头指示牌和面包屑
--导航设计

无法承受的浏览之轻:感觉不到大小、方向、位置
导航的用途:
导航帮助我们找到想要的任何东西
导航告诉我们现在身处何处
还有:
导航给了我们一些固定的感觉
导航告诉我们当前的位置
导航告诉我们如何使用网站
导航给了我们对网站建造者的信心

web导航的习惯用法大部分来自已有的印刷品习惯用法

持久导航应该包括5个元素:
站点ID(logo)
栏目
实用工具(“联系我们”,“站点地图”等,持久导航上只能放4-5个使用工具,其他不常用的可进行分组并放在首页上。)
回主页的方式
搜索的方式

持久导航的例外:
主页:表现可不同
表单:只需站点ID、回主页的方式等

重视低层次的导航

重视页面名称
每个页面都需要一个名称
页面名称要出现在合适的位置
名称要引人注目
名称要和点击的链接一致
你在这里:突出当前位置

面包屑(层级菜单)

喜欢标签的四个理由:
它们不言而喻
它们很难错过
它们很灵活
它们暗示了一个物理的空间

Amazon标签设计:
正确绘制
颜色编码
当你进入网站时,有一个标签已经选中

来做后备箱测试
这是什么网站?(网站ID)
我在哪个页面上?(网页名称)
这个网站的主要栏目有哪些?(栏目清单)
在这个层次上我都有哪些选择?(本页导航)
我的导航系统的什么位置?(“你在这里”的指示器)
我怎么搜索?

 

7.首先承认,主页不由你控制
--设计首页

主要要完成的任务:
站点的标识和使命
站点层次
搜索
导读
内容更新
友情链接
快捷方式
注册
让我看到自己正在找的东西
……还有我没有寻找的
告诉我从那里开始
建立可信度和信任感

一些常见的约束:
每个人都想占一席之地
想要参与的人太多
一个尺寸要适合所有人


这个网站是做什么的?——传达整体形象
口号:清楚、言之有物;长度适中;表述网站的特点和显而易见的好处;有个性、生动、有时候还很俏皮
欢迎广告:
需要多大空间就使用多大空间
但也不要使用过多的空间
不要把使命陈述当作欢迎广告
最重要的是进行测试

我该从哪里开始?
想搜索、想扫描、想扫描最精彩的内容
让每个起点看起来像个起点

主页导航可以不一样
但要
让栏目的名称保持不变:同样的顺序、同样的文字和同样的分组。
进可能多的保持视觉提示:同样的字体颜色和大小。
总之,能不变的不变。

下拉框的问题
你必须把它找出来
他们难以扫描
他们不好控制

短视行为:杀鸡取卵
应该让所有的利益相关者知道过度使用首页的危险,并且提供其他方法来缓解这种需求。

你来判断
这个网站是做什么的?
我该从哪里开始?

确定你没有做错的几件事
===========================================
8.农场主和牧牛人应该是朋友
--为何web设计团队讨论可用性实在浪费时间,如何避免这种情况

讨论可用性是在浪费时间:
每个人、每个角色喜好不同
普通用户的喜好不同
解药:
错误:大部分人喜欢××吗?
正确:在这个页面,这样的上下文中,××对使用这个网站的大部分人会产生一种良好的体验吗?

9.一天10美分的可用性测试(这一章请仔细看原书)
--让测试简单,这样你能进行充分的测试

焦点小组不是可用性测试

测试分类:
传统的可用性测试
跳楼大减价的简易可用性测试
补充:站点跟踪

问题分类指南:
忽略皮划艇(用户偏离后返回)问题
抵制添加的冲动
不要太看重人们对新功能的要求
抓住够得着的果子

大的方面
=============================================
10.可用性是基本礼貌
--为什么你的网站应该让人尊敬

降低好感的几种方式:
隐藏我想要的信息
因为没有按照你们的方式行事而惩罚我
向我询问不必要的信息
敷衍我,欺骗我
给我设置障碍
你的网站看上去不专业

提高好感的几种方式:
知道人们在你网站上想做什么,并让它们明白简易
告诉我我想知道的
尽量减少步骤
花点心思
知道我可能有哪些疑问,并且给予解答
为我提供协助,例如打印友好页面
容易从错误中恢复
如有不确定,记得道歉

11、12章不用做笔记

我的总结
============================================
三大可用性定律:
1.别让我思考
2.点击多少次都没关系,只要每次点击都是无须思考、明确无误的选择。
准则:三次无须思考、明确无误的点击相当于一次需要思考的点击
3.省略不必要的文字
我们实际上是如何使用Web的三个事实
1.我们不是阅读,而是扫描;
2.我们不作最佳选择,而是满意即可;
3.我们不追根究底,而是勉强应付。
一个态度:
循序渐进,不断积累和改进
细节决定一切
一个方法:
用户可用性测试

设计细节:
笔记中记录的。


smarteng 发布于 2009-10-28 02:59

PHP框架——Yii

Yii 是什么
Yii 是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。它将 Web 编程中的可重用性发挥到极致,能够显著加速开发进程。Yii(读作“易”)代表简单(easy)、高效(efficient)、可扩展(extensible)。

需求
要运行一个基于 Yii 开发的 Web 应用,你需要一个支持 PHP 5.1.0 (或更高版本)的 Web 服务器。

对于想使用 Yii 的开发者而言,熟悉面向对象编程(OOP)会使开发更加轻松,因为 Yii 就是一个纯 OOP 框架。

[break]
Yii 适合做什么?
Yii 是一个通用 Web 编程框架,能够开发任何类型的 Web 应用。它是轻量级的,又装配了很好很强大的缓存组件,因此尤其适合开发大流量的应用,比如门户、论坛、内容管理系统(CMS)、电子商务系统,等等。

Yii 和其它框架比起来怎样?
和大多数 PHP 框架一样,Yii 是一个 MVC 框架。

Yii 以性能优异、功能丰富、文档清晰而胜出其它框架。它从一开始就为严谨的 Web 应用开发而精心设计,不是某个项目的副产品或第三方代码的组合,而是融合了作者丰富的 Web 应用开发经验和其它热门 Web 编程框架(或应用)优秀思想的结晶。
听说Yii是zend php5 比赛冠军的团队作品,有空研究一下~ :)
中文手册地址:http://www.yiiframework.com/doc/guide/zh_cn/


smarteng 发布于 2009-10-28 02:32

博主

    blogger

    smarteng

    人生就流星,虽然转瞬即逝,但也有永恒。

日历

恰饭

标签