PHP写一段代码,确保多个进程同时写入一个文件成功
1. 加锁
$fp = fopen("lock.txt","w+");
if (flock($fp,LOCK_EX)) {
//获得写锁,写数据
fwrite($fp, "write something");
// 解除锁定
flock($fp, LOCK_UN);
} else {
echo "file is locking...";
}
fclose($fp);
2. functionwrite_file($filename,$content){
$lock=$filename. '.lck';
$write_length= 0;
while(true) {
if(file_exists($lock) ) {
usleep(100);
} else {
touch($lock);
$write_length=file_put_contents($filename,$content, FILE_APPEND);
break;
}
}
if(file_exists($lock) ) {
unlink($lock);
}
return$write_length;
}
PHP操作目录(文件夹)的常用函数
opendir -- 打开目录句柄,打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中
is_dir() --判断给定文件名是否是一个目录
readdir -- 从目录句柄中读取条目,返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回
scandir -- 列出指定路径中的文件和目录
is_readable 文件是否可读
is_writable 文件是否可写
closedir 关闭目录句柄
mkdir() --新建目录
PHP操作文件的常用函数
basename ( $path) 返回路径中的文件名部分
dirname — 返回路径中的目录部分
pathinfo — 返回文件路径的信息
fopen — 打开文件或者 URL
fstat — 通过已打开的文件指针取得文件信息
filesize — 取得文件大小
filetype() 文件类型
fseek();--在文件指针中定位
flock() - -轻便的咨询文件锁定
disk_free_space — 获得目录所在磁盘分区的可用空间(字节单位)
disk_total_space() 返回一个目录的磁盘总大小
fileatime — 取得文件的上次访问时间
filectime() 最后改变时间(任何数据的修改)
filemtime — 取得文件修改时间
file — 把整个文件读入一个数组中
fgets — 从文件指针中读取一行
fgetss -- 从文件指针中读取一行并过滤掉 HTML 标记
file_put_contents — 将一个字符串写入文件
file_exists — 检查文件或目录是否存在
feof — 测试文件指针是否到了文件结束的位置
fclose — 关闭一个已打开的文件指针
PHP处理数据库的常用函数
mysql_connect: 打开 MySQL 服务器连接
mysql_close: 关闭 MySQL 服务器连接
mysql_create_db: 建立一个 MySQL 新数据库
mysql_drop_db: 移除数据库
mysql_fetch_array: 返回数组资料。
mysql_fetch_assoc()-获取和显示数据
mysql_fetch_field: 取得字段信息
mysql_fetch_row: 返回单列的各字段
mysql_fetch_lengths: 返回单列各栏资料最大长度
mysql_query: 送出一个 query 字符串。
mysql_result: 取得查询 (query) 的结果。
mysql_select_db: 选择一个数据库
mysql_num_rows 得到 SELECT 返回的数目
mysql_insert_id 返回最后一次使用 INSERT 指令的 ID
mysql_errno: 返回错误信息代码。
mysql_error: 返回错误信息
mysql_free_result(res) 释放结果内存
使用范例
$dbh = mysql_connect('localhost:3306','mcclain','standard');
mysql_select_db('admreqs');
$query ="insert into requests(date, request, email, priority,status)values (NOW(),'$description','$email','$priority','NEW')";
$res = mysql_query($query, $dbh);
$query ="select max(id) from requests";
$res = mysql_query($query, $dbh);
$err = mysql_error();
if($err){ echo"发生错误,请通知站长"; }
$row = mysql_fetch_row($res);
echo"未来您使用的号码为:".$row[0];
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_array($result)) {
echo $row["user_id"];
echo $row["fullname"];
}
mysql_free_result($result);//释放结果内存
或者
$result = mysql_db_query("MyDatabase","select * from test");
while($row = mysql_fetch_object($result)) {
echo $row->user_id;
echo $row->fullname;
}
mysql_free_result($result);
Print、echo、print_r有什么区别?
① echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对而言如果只是输出echo会更快,而print_r通常用于打印变量的相关信息,通常在调试中使用。
② print 是打印字符串
③ print_r 则是打印复合类型 如数组 对象
在程序的开发中,如何提高程序的运行效率?
①优化SQL语句,查询语句中尽量不使用select *,查寻字段;少用子查询可用表连接代替;少用模糊查询;
②数据表中创建索引;
③对程序中经常用到的数据生成缓存
AJAX的优势是什么?
ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验
1)javascript实现
try{
ajax = new ActiveXObject("microsoft.xmlhttp");
}catch(e1){
ajax = new XMLHttpRequest();
}
var method = "GET";
var url = "https://wh.yueloo.com.cn/v1.0/get_book_base_info?book_id=" + 1005;
ajax.open(method,url);
ajax.send(null);
/*
//post方式
var content = "username=" + username;
ajax.send(content);
*/
ajax.onreadystatechange = function(){
if(ajax.readyState == 4){
if(ajax.status == 200){
var nowStr = ajax.responseText;
// console.log(nowStr);
document.write(nowStr);
}
}
}
2)JQuery ajax
$.ajax({
type: 'POST',
url:"index.php",
data: data,
async:true,
dataType:"json",
error:function(xhr){
alert("错误提示: " + xhr.status + " " + xhr.statusText);
},
success:function(result){
$("div").html(result);
}
});
安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制?
①防远程提交;②防SQL注入,对特殊代码进行过滤;
③防止注册机灌水,使用验证码;
WEB开发中数据提交方式有几种?有什么区别?百度使用哪种方式?
Get与post两种方式
区别:1. Get从服务器获取数据,post向服务器传送数据
2. Get传值在url中可见,post在url中不可见
4. Get传值一般在2KB以内,post传值大小可以在php.ini中进行设置
5. get安全性非低,post安全性较高,执行效率却比Post高
建议:
1、get式安全性较Post式要差些包含机密信息建议用Post数据提交式;
2、做数据查询建议用Get式;做数据添加、修改或删除建议用Post方式;
百度使用的get方式,因为可以从它的URL中看出
网友评论