美文网首页我爱编程
php 基础知识点(2)

php 基础知识点(2)

作者: 青青玉立 | 来源:发表于2018-03-29 18:34 被阅读0次

    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中看出

    相关文章

      网友评论

        本文标题:php 基础知识点(2)

        本文链接:https://www.haomeiwen.com/subject/nekvcftx.html