56、PHP文件操作pathinfo、realpath、flock、tempnam、tmpfile

阅读() @2019-05-12 11:46:34

1、pathinfo()函数以数组或字符串的形式返回关于文件路径的信息。

$arry = pathinfo('aa.txt');
echo '<pre>';
print_r($arry);
/*
Array
(
    [dirname] => .
    [basename] => aa.txt
    [extension] => txt
    [filename] => aa
)
*/

2、realpath()函数把相对路径转换成绝对路径。

echo realpath('.');
//D:\wamp\www\myPhp

3、文件锁flock()函数,flock(file,lock,block)。

file—必需。规定要锁定或释放的已打开的文件。

lock—必需。规定要使用哪种锁定类型。

(1)要取得共享锁定(读取的程序),将 lock 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。也就是某个文件在当前脚本被锁定期间,其他脚本不能对这个文件进行内容写入,只能读取。

(2)要取得独占锁定(写入的程序),将 lock 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。某个文件在当前脚本被锁定期间,其他脚本不能对这个文件进行吸入和读取。

(3)要释放锁定(无论共享或独占),将 lock 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。文件解锁之后,其他脚本可以对这个文件进行任意的写入和读取操作。

(4)如果不希望 flock() 在锁定时堵塞,则给 lock 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。一个文件只需要被锁定一次,不需要被多个脚本多次锁定,这样会造成堵塞。也就是只有在当前脚本中的锁被释放之后,其他脚本才能再次锁定这个文件。

block— 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。

测试代码如下(test.php和test_1.php):

/*test.php中的代码*/
$file = fopen('aa.txt','r+');
fwrite($file,'hello world');
flock($file,LOCK_EX+LOCK_NB);
sleep(3);
flock($file,LOCK_UN);
fclose($file);
/*test_1.php中的代码*/
$file = fopen('aa.txt','r+');
fwrite($file,'php视频教程');
rewind($file);
$content = fread($file,filesize('aa.txt'));
echo $content;
fclose($file);

上面两个文件中的代码最后执行结果是,aa.txt文本中的内容是hello world,并且在aa.txt在test.php脚本中被锁定3s期间,test_1.php无法对aa.txt进行任何的写入和读取甚至锁定操作。

4、tempnam()函数在某个目录下随机生成一个不重名的临时文件(后缀是tmp)。

$file = tempnam('.','test_');
echo $file.'<br/>';

5、tmpfile()函数以读写(w+)模式建立一个具有唯一文件名的临时文件。相当于建立了一个临时文件,立刻将他fopen打开了。接下来可以直接进行读写操作!

$file = tmpfile();
fwrite($file,'hello world');
rewind($file);
fpassthru($file);//hello world
//可以把tmpfile()生成的文件想象成一个临时虚拟的文件,在目录下并不存在,所以无法用fread()去读取,只能用fpassthru读取在缓冲区。
fclose($file);

注意:用tmpfile()生成的临时文件会在fclose文件关闭或脚本执行完成之后自动删除

微信二维码
锐壳主机