用php写笔记系统,PHP笔记 | 文件系统

1. PHP文件系统之读取文件内容

PHP具有丰富的文件操作函数,

最简单的读取文件的函数为file_get_contents,

可以将整个文件全部读取到一个字符串中。

$content = file_get_contents('./test.txt');

file_get_contents也可以 通过参数控制读取内容的开始点以及长度。

$content = file_get_contents('./test.txt', null, null, 100, 500);

PHP也提供类似于C语言 操作文件的方法,

使用fopen,fgets,fread等方法,

fgets可以从文件指针中读取一行,

freads可以读取指定长度的字符串。

$fp = fopen('./text.txt', 'rb');

while(!feof($fp)) {

echo fgets($fp); //读取一行

}

fclose($fp);

$fp = fopen('./text.txt', 'rb');

$contents = '';

while(!feof($fp)) {

$contents .= fread($fp, 4096); //一次读取4096个字符

}

fclose($fp);

使用fopen打开的文件,最好使用fclose关闭文件指针,以避免文件句柄被占用。

2. PHP文件系统之判断文件是否存在

一般情况下在对文件进行操作的时候需要先判断文件是否存在,

PHP中常用来判断文件存在的函数有两个——is_file与file_exists.

如果只是判断文件存在,

使用file_exists就行,

file_exists不仅可以判断文件是否存在,

同时也可以判断目录是否存在;

从函数名可以看出,

is_file是确切的判断给定的路径是否是一个文件。

$filename = './test.txt';

if (file_exists($filename)) {

echo file_get_contents($filename);

}

$filename = './test.txt';

if (is_file($filename)) {

echo file_get_contents($filename);

}

更加精确的可以使用is_readable与is_writeable在文件是否存在的基础上,

判断文件是否可读与可写。

$filename = './test.txt';

if (is_writeable($filename)) {

file_put_contents($filename, 'test');

}

if (is_readable($filename)) {

echo file_get_contents($filename);

}

demo:

$filename = '/data/webroot/usercode/code/resource/test.txt';

//判断如果$filename文件存在的话 就输出文件内容

if(file_exists($filename)){

echo '文件存在';

}else{

echo '文件不存在';

}

3. PHP文件系统之取得文件的修改时间

文件有很多元属性,

包括:文件的所有者、创建时间、修改时间、最后的访问时间等。

fileowner:获得文件的所有者

filectime:获取文件的创建时间

filemtime:获取文件的修改时间

fileatime:获取文件的访问时间

其中最常用的是文件的修改时间,

通过文件的修改时间,可以判断文件的时效性,

经常用在静态文件或者缓存数据的更新。

date('Y-m-d H:i:s',time()) 按24小时制

date('Y-m-d h:i:s',time()) 按12小时制

'Y-m-d H:i:s'——年月日 时分秒

$mtime = filemtime($filename);

echo '修改时间:'.date('Y-m-d H:i:s', filemtime($filename));

demo:

$filename = '/data/webroot/usercode/code/resource/test.txt';

echo '所有者:'.fileowner($filename).'
';

echo '创建时间:'.filectime($filename).'
';

echo '修改时间:'.filemtime($filename).'
';

echo '最后访问时间:'.fileatime($filename).'
';

//给$mtime赋值为文件的修改时间

$mtime = filemtime($filename);

//通过计算时间差 来判断文件内容是否有效

if (time() - $mtime > 3600) {

echo '
缓存已过期';

} else {

echo file_get_contents($filename);

}

4. PHP文件系统之取得文件的大小

通过filesize函数可以取得文件的大小,文件大小是以字节数(也就是b)表示的。

所以filesize函数的输出结果要改成“kb”为单位的话,便需除以1024的一次方;

要改成‘mb’的话,则需除以1024的二次方,以此类推;

其demo自定义函数见下方第二个代码块;

$filename = '/data/webroot/usercode/resource/test.txt';

$size = filesize($filename);

如果要转换文件大小的单位,可以自己定义函数来实现。

function getsize($size, $format = 'kb') {

$p = 0;

if ($format == 'kb') {

$p = 1;

} elseif ($format == 'mb') {

$p = 2;

} elseif ($format == 'gb') {

$p = 3;

}

$size /= pow(1024, $p);

return number_format($size, 3);

}

$filename = '/data/webroot/usercode/code/resource/test.txt';

$size = filesize($filename);

$size = getsize($size, 'kb'); //进行单位转换

echo $size.'kb';

值得注意的是,没法通过简单的函数来取得目录的大小,

目录的大小是该目录下所有子目录以及文件大小的总和,

因此需要通过递归的方法来循环计算目录的大小。

5. PHP文件系统之写入内容到文件

与读取文件对应,PHP写文件也具有两种方式,最简单的方式是采用file_put_contents。

$filename = './test.txt';

$data = 'test';

file_put_contents($filename, $data);

上例中,$data参数可以是一个一维数组,

当$data是数组的时候,会自动的将数组连接起来,相当于$data=implode('', $data);

同样的,PHP也支持类似C语言风格的操作方式,采用fwrite进行文件写入。

$fp = fopen('./test.txt', 'w');

fwrite($fp, 'hello');

fwrite($fp, 'world');

fclose($fp);

又有写法:

$fp = fopen($filename, 'w');

fwrite($fp, 'hello world');

fclose($fp);

--------------------------

file_put_contents($filename, 'hello world');

6. PHP文件系统之删除文件

跟Unix系统命令类似,PHP使用unlink函数进行文件删除。

unlink($filename);

删除文件夹使用rmdir函数,

文件夹必须为空,

如果不为空或者没有权限则会提示失败。

rmdir($dir);

如果文件夹中存在文件,

可以先循环删除目录中的所有文件,

然后再删除该目录,

循环删除可以使用glob函数遍历所有文件。

foreach (glob("*") as $filename) {

unlink($filename);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于PHP的云笔记后端的示例代码,供您参考: ```php <?php // 连接数据库 $host = "localhost"; $username = "your_username"; $password = "your_password"; $database = "your_database"; $conn = mysqli_connect($host, $username, $password, $database); // 用户注册 function register($username, $password) { global $conn; $password = md5($password); // 使用md5加密密码 $sql = "INSERT INTO users (username, password) VALUES ('$username', '$password')"; mysqli_query($conn, $sql); } // 用户登录 function login($username, $password) { global $conn; $password = md5($password); // 使用md5加密密码 $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'"; $result = mysqli_query($conn, $sql); $user = mysqli_fetch_assoc($result); return $user; } // 新建笔记 function create_note($title, $content, $category_id, $user_id) { global $conn; $sql = "INSERT INTO notes (title, content, category_id, user_id) VALUES ('$title', '$content', '$category_id', '$user_id')"; mysqli_query($conn, $sql); } // 获取笔记列表 function get_note_list($user_id) { global $conn; $sql = "SELECT * FROM notes WHERE user_id='$user_id'"; $result = mysqli_query($conn, $sql); $notes = mysqli_fetch_all($result, MYSQLI_ASSOC); return $notes; } // 获取笔记详情 function get_note_detail($note_id) { global $conn; $sql = "SELECT * FROM notes WHERE id='$note_id'"; $result = mysqli_query($conn, $sql); $note = mysqli_fetch_assoc($result); return $note; } // 删除笔记 function delete_note($note_id) { global $conn; $sql = "DELETE FROM notes WHERE id='$note_id'"; mysqli_query($conn, $sql); } // 定义API接口 if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_GET['action'] === 'register') { $username = $_POST['username']; $password = $_POST['password']; register($username, $password); } elseif ($_SERVER['REQUEST_METHOD'] === 'POST' && $_GET['action'] === 'login') { $username = $_POST['username']; $password = $_POST['password']; $user = login($username, $password); echo json_encode($user); } elseif ($_SERVER['REQUEST_METHOD'] === 'POST' && $_GET['action'] === 'create_note') { $title = $_POST['title']; $content = $_POST['content']; $category_id = $_POST['category_id']; $user_id = $_POST['user_id']; create_note($title, $content, $category_id, $user_id); } elseif ($_SERVER['REQUEST_METHOD'] === 'GET' && $_GET['action'] === 'get_note_list') { $user_id = $_GET['user_id']; $notes = get_note_list($user_id); echo json_encode($notes); } elseif ($_SERVER['REQUEST_METHOD'] === 'GET' && $_GET['action'] === 'get_note_detail') { $note_id = $_GET['note_id']; $note = get_note_detail($note_id); echo json_encode($note); } elseif ($_SERVER['REQUEST_METHOD'] === 'POST' && $_GET['action'] === 'delete_note') { $note_id = $_POST['note_id']; delete_note($note_id); } ?> ``` 这是一个简单的示例代码,仅供参考。实际项目中需要考虑更多的安全性和性能优化问题,比如SQL注入、XSS攻击等。如果您需要更完整的代码,可以在网上查找相关的开源项目或者使用框架来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值