文件锁有两种:共享锁和排他锁,也就是读锁(LOCK_SH)和写锁(LOCK_EX)
文件的锁一般这么使用:
$fp = fopen("filename", "a");
flock($fp, LOCK_SH) or die("lock error")
$str = fread($fp, 1024);
flock($fp, LOCK_UN);
fclose($fp);
$fp = fopen("filename", "a");
flock($fp, LOCK_SH) or die("lock error")
$str = fread($fp, 1024);
flock($fp, LOCK_UN);
fclose($fp);
注意fwrite之后,文件立即就被更新了,而不是等fwrite然后fclose之后文件才会更新,这个可以通过在fwrite之后fclose之前读取这个文件进行检查
但是什么时候使用lock_ex什么时候使用lock_sh呢?
读的时候:
如果不想出现dirty数据,那么最好使用lock_sh共享锁。可以考虑以下三种情况:
1. 如果读的时候没有加共享锁,那么其他程序要写的话(不管这个写是加锁还是不加锁)都会立即写成功。如果正好读了一半,然后被其他程序给写了,那么读的后一半就有可能跟前一半对不上(前一半是修改前的,后一半是修改后的)
2. 如果读的时候 ......
function mysql_conn(){
$conn=mysql_pconnect('localhost','root','root');
mysql_select_db('liuyan');
mysql_query('set names utf8');
return $conn;
}
//$sql为SQL语句;$page为第几页,$pagesize为一页显示多少条
//最后将返回一个array的数据类型,里面包含$arr['result'],$arr['fypage']
function page($sql,$page=0,$pagesize=0){
$arr = array();
if($page != 0 && $pagesize != 0){ //no fanye
$conn=mysql_conn();
$result2 = mysql_query($sql);
$sql .= " limit ".($page-1)*$pagesize.','.$pagesize;
$result = mysql_query($sql);
$num=mysql_num_rows($result2); //the total num
mysql_close($conn);
$pagecount = 0;
if($num){
if($num<$pagesize){
$pagecount=1;
}
if($num%$pagesize){
$pagecount=(int)($num/$pagesize)+1;
}else{
$pagecount=($num/$pagesize);
}
}else{
$pagecount=0;
}
$fypage = '';
if($page==1){
$fypage.=' first | previous |';
}else{
$fypage.="<a href="\" mce_href="\""? ......
一、引号定义字符串
在PHP中,通常一个字符串被定义在一对引号中,如:
'I am a
string in single quotes'
"I am a string in double
quotes"
PHP语法分析器是用成对的引号来判断一个字符串的。因此,所有字符串必须使用同一种单或者双
引号来定义开始和结束。例如,下面的字串定义是不合法的:
"I
am not a valid string since I have unmatching quote marks'
'Me
neither!"
定义字符串时,只有一种引号被视为定义符,即单引号或双引号。于是,如果一个字符串由双引
号开始,那么只有双引号被分析器解析。这样,你就可以在双引号串中包含任何其他字符,甚至单引
号。下面的引号串都是合法的:
$s
= "I am a 'single quote string' inside a double quote string";
$s = 'I am a
"double quote string" inside a single quote
string';
当PHP遇到与串的开头相对应的引号时,便认为已经到了字符串尾部,于是:
"Why doesn't "this"
work?"
实际上被PHP语法分析器分成三个部分:
"Why doesn't
"——包含一个单引号的双引号串
......
封装一个function,以便复用。
支持https,或者http的get或者post。
function httpURLfeedback($url,$request_type,$time_out = "60") {
$arr = parse_url($url);
$transports = "";
$port = 0;
$host = $arr['host'];
$query = $arr['query'];
$path = $arr['path'];
if($urlarr["scheme"] == "https") {
$transports = "ssl://";
$port = "443";
} else {
$transports = "tcp://";
$port = "80";
}
$fp=@fsockopen($transports.$host,$port,$errno,$errstr,$time_out);
if(!$fp) {
die("ERROR: $errno - $errstr<br />\n");
} else {
$out = "";
if($request_type == 'get'){
$out .= "GET $path?$query HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n\r\n";
}else {
$out .= "POST $path HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Content-type: application/x-www-form-urlencoded\r\n";
$out .= "Content-length: ".strlen($query)."\r\n";
$out .= "Connection: Close\r\n\r\n";
$out .= $query. "\r\n\r\n";
......
这个原因有以下几个:
第一,在php中的内容不是用utf-8进行编码的,可以再php头部添加:header("Content-Type:text/html;charset=utf-8");
第二,php文件本身不是utf-8编码的,这可以更改zend-studio,的文件编码格式,指定为utf-8方法是:windw->preference->General->Workspace->Text file encoding,选择utf-8. ......
linux下apache+php安装常见问题 configure: error: Unable to find libgd.(a|so)
如果使用的是ubuntu或debian就很简单了,直接sudo apt-get install apache2 libapache2-mod-php5 php5 php5-gd 就基本上搞定,但是用源代码安装还是很麻烦~
wget http://www.boutell.com/gd/http/gd-2.0.11.tar.gz
tar zxvf gd-2.0.11.tar.gz
cd gd-2.0.11
sudo ./configure --prefix=/usr/local/gd2
sudo make
sudo make install再php:~/:./configure …… --with-gd=/usr/local/gd2 ……
以下是转载的,而且都是基于yum install或者apt-get的。
1) Configure: error: xml2-config not found. Please check your libxml2 installation.
Solutions :
Quote:
#yum install libxml2 libxml2-devel (For Redhat & Fedora)
# aptitude install libxml2-dev (For ubuntu)
2) Checking for pkg-config… /usr/bin/pkg-config
configure: error: Cannot find OpenSSL’s <evp.h>
Solutions :
Quote:
#yum install openssl openssl-devel
3) Configure: error: Please rei ......