php服务器交互,PHP与文件系统和服务器的交互

0开始之前

1文件相关操作

操作文件的相关步骤:打开文件 → 进行操作 → 关闭文件

打开文件

使用fopen()函数打开一个文件,打开一个文件的时候,还需要指定如何使用它,也就是文件模式。

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

☛ fopen打开的文件是相对于服务器的地址的可以是服务器的根文档下的绝对地址,也可以是相对于web根目录地址( / 是正斜线 \ 是反斜线)

第二个选项$mode常用的值有:r(只读模式打开)、a(以追加模式写入)、b(二进制,推荐一直使用这个选项)

$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

$link = fopen( "$DOCUMENT_ROOT/../orders/orders.txt",'ab');

进行操作

◦写文件fwrite(),可安全用于二进制文件

int fwrite ( resource $handle , string $string [, int $length ] )

◦函数feof(),它的唯一参数是文件指针,指针指向了文件末尾,它将返回true(feof:File End of File)

函数fgets(),可以从文件中每次读取一行内容。

//$fp是打开文件后的句柄

while( !feof($fp) ){

$order = fgets($fp, 999);

echo $order."
";

}

关闭文件

调用fclose()函数关闭文件

☛ 其他有用的文件函数(PHP中没有名为delete的函数)

函数名

作用

file_exists()

查看文件是否存在

filesize()

确定文件大小

unlink()

删除一个文件

文件锁定

当一个文件被打开并且在进行读写操作之前,应该对文件加锁,操作之后,应释放已有的锁定。

在PHP中,文件锁是通过flock()函数来实现的:

bool flock ( resource $handle , int $operation [, int &$wouldblock ] )

operation可以是以下值之一:

◦ LOCK_SH 取得共享锁定(读取的程序)。

◦ LOCK_EX 取得独占锁定(写入的程序。

◦ LOCK_UN 释放锁定(无论共享或独占)。

如果不希望 flock() 在锁定时堵塞,则是 LOCK_NB(Windows 上还不支持)。

$fp = fopen("/tmp/lock.txt", "r+");

if (flock($fp, LOCK_EX)) { // 进行排它型锁定

ftruncate($fp, 0); // truncate file

fwrite($fp, "Write something here\n");

fflush($fp); // flush output before releasing the lock

flock($fp, LOCK_UN); // 释放锁定

} else {

echo "Couldn't get the lock!";

}

fclose($fp);

?>

2文件上传

实例之前,须知道php.ini中关于文件上传的设置指令

指令

描述

默认值

file_uploads

控制是否允许HTTP方式的文件上传。允许值为On或Off

ON(启用)

upload_tmp_dir

指定上传文件在被处理之前的临时保存目录。如果没有设置该选项,将使用系统默认值

NULL

upload_max_filesize

控制允许上传的文件最大大小。如果文件大小大于该值,PHP讲创建一个文件大小为0的占位符文件

2M

post_max_file

控制PHP可以接受的,通过POST方法上传数据的最大值

8M

☛ 在上传的表单之中,必须设置属性enctype="multipart/form-data",以告诉服务器关于上传文件的类型

编写处理文件的PHP

编写捕获上载文件的PHP代码是直观的简单的

if( $_FILES['userfile']['error'] > 0 )

{

echo 'Problem:';

switch($_FILES['userfile']['error'])

{

case 1: echo 'File exceeded upload_max_fileseze';

break;

case 2: echo 'File exceeded max_file_size';

break;

case 3: echo 'File only partially uploaded';

break;

case 4: echo 'No file uploaded';

break;

case 6: echo 'Cannot upload file:No temp directory specified';

break;

case 7: echo 'Upload failed:Cannot write to disk';

break;

}

exit;

}

//Dose the file have the right MIME type?

if( $_FILES['userfile']['type'] != 'text/plain')

{

echo 'Problem:file is not plain text';

exit;

}

//put the file where we'd like it

$upfile = '/uploads/'.$_FILES['userfile']['name'];

if(is_uploaded_file($_FILES['userfile']['tmp_name']))

{

if(!move_uploaded_file($_FILES['userfile']['tmp_name'], $upfile))

{

echo 'Problem:Could not move file to destination directory';

exit;

}

}

else

{

echo 'Problem:Possible file upload attack.Filename:';

echo $_FILES['userfile']['name'];

exit;

}

echo 'File uploaded successfully
';

对于浏览器上传的文件,在服务器端可以使用超全局数组$_FILES使用,如果传递的表单元素名称是userfile,这个数组将有如下的元素:

◦ $_FILES['userfile']['tmp_name']:变量的值就是文件在Web服务器中临时存储的位置。

◦ $_FILES['userfile']['name']:变量的值是用户系统中原来的文件名称

◦ $_FILES['userfile']['size']:变量存储的值就是文件的字节大小

◦ $_FILES['userfile']['type']:变量存储的是文件的MIMEA类型

◦ $_FILES['userfile']['error']:变量的值就是文件上传过程中产生的错误代码

3使用目录函数

从目录读取

使用基本目录函数opendir()、closedir()、readdir()可以完成基本的目录读取操作

$current_dir = 'C:/xampp/htdocs/pam';

$dir = opendir($current_dir);

echo '

Directory List:

  • ';

while(false !== ($file = readdir($dir)))

{

//strip out the two entries . and ..

if($file != '.' && $file != '..')

{

echo "

$file";

}

}

echo '

';

closedir($dir);

获得当前目录的信息

dirname($path)函数:返回路径的目录部分

basename($path)函数:返回路径的文件名称部分

disk_free_space($path)函数:返回目录所在分区的可用空间(以字节为单位)

创建和删除目录

创建目录使用mkdir()函数,可以按如下创建目录:

$oldumask = umask(0); //对于Windows系统是无效的

mkdir("/tmp/testing",0777);

umask($oldumask);

函数rmdir()讲删除一个目录,要注意,要删除的目录必须是一个空目录。

4与文件系统的交互

获取文件信息的相关函数

参照手册

更改文件属性

参照手册

创建、删除和移动文件

调用touch()函数来创建一个文件、调用unlink()函数来删除一个文件、调用copy()函数来复制文件、调用rename()函数来重命名(移动)文件

5使用程序执行函数和与环境变量的交互

可以使用4种主要的技术在Web服务器上执行命令:

exec() passthru() system() 反引号

可以使用getenv()和putenv()来设置运行PHP的服务器上的环境变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值