php5.6的file_put_contents问题求解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php5.6的file_put_contents问题求解相关的知识,希望对你有一定的参考价值。
<?php
$txt = intval(file_get_contents('cly.txt'));
file_put_contents('cly.txt', strval($txt + 1));
echo $txt;
?>
上面的是我php文件全部代码
-----------测试问题----------
php5.6环境下:
当运行这个文件的时候,如果cly.txt不存在,会生成一个cly.txt并写入数字1,页面404,也就是说echo $txt;并没有执行
服务器提示:PHP Warning: file_get_contents(cly.txt): failed to open stream: No such file or directory in D:\www\index.php on line 3
当运行这个文件的时候,如果cly.txt已经存在,会把cly.txt的数字+1并写回去,页面返回2,echo $txt;执行成功。
php5.2环境下:
当运行这个文件的时候,如果cly.txt不存在,会生成一个cly.txt并写入数字1,页面返回1,也就是说在5.2的环境下,即使cly.txt不存在,echo $txt;也依然执行了。
-----------那么问题来了----------
5.6的环境下,如果cly.txt不存在,那么用file_put_contents创建了该文件之后,页面就404了,怎么样才能让file_put_contents创建一个新文件之后依然正常的执行下去呢。同样的问题在5.2环境下就不存在,是我代码写的不规范吗?求指正,5.6中怎么才能正常。
有地方不明白你要干
<?php
$txt = intval(file_get_contents('cly.txt'));
file_put_contents('cly.txt', strval($txt + 1));
echo $txt;
?>
第一句话 intval是强制转换成整数。
file_get_contents返回类型是bool|string
结果就是 文件不存 返回的是false 而在一般的语言中都是false 本身就是0. 如果存在肯定返回的是里面的字符串。而任何的字符串只要不是数字开头 intval都会返回0。
而php 中 Warning 不会影响程序继续运行。
所以结果就是第一句话返回的文件不存在就是0,
至于你说的404描述错误 。这个不可能产生。
还有代码真的不严谨。
应该这样
$filename='cly.txt';
if(!file_exists($filename))//文件不存在的时候
file_put_contents($filename, '');//生成文件
$txt = intval(file_get_contents($filename)) ;
file_put_contents($filename, strval($txt + 1));
echo $txt;
这样就不会出现你说的问题了追问
这样子啊,是我钻牛角尖了,一直在想着怎么让先创建文件还不报错,忘记可以先判断了。谢谢老哥提醒,另外还有个问题,file_put_contents不能创建文件夹吗?目录已经设置可写,但是不能创建文件夹。
$filename='aaa/cly.txt';
file_put_contents($filename, '');//生成文件
这样子,aaa不能创建,必须手动创建aaa之后,cly.txt才能自动生成,有办法解决吗?
用mkdir
第三个参数设置true;
mkdir('aaaa/bbb/ccc',777,true);可以创建多层
但是不能直接创建文件
mkdir('aaaa/bbb/ccc/cly.txt',777,true);这样会把cly.txt当成文件名
谢老哥,已加分^_^
参考技术A 在PHP的一些应用中需要写日志或者记录一些信息,这样的话。可以使用fopen(),fwrite()以及 fclose()这些进行操作。也可以简单的使用file_get_contents()和file_put_contents().file_put_contents()写文件。默认的是重新写文件,也就是会 替换原先的内容。追加的话使用参数FILE_APPEND.
以追加形式写入内容 当设置 flags 参数值为 FILE_APPEND 时,表示在已有文件内容后面追加内容的方式写入新数据:
FILE_APPEND:在文件末尾以追加的方式写入数据
int file_put_contents ( string filename, string data [, int flags [, resource context]] ) file_put_contents("log.txt", "Hello world everyone.", FILE_APPEND);
//参数说明:
filename //要写入数据的文件名
data //要写入的数据。类型可以是 string,array(但不能为多维数组),或者是 stream 资源
flags //可选,规定如何打开/写入文件。可能的值:
FILE_USE_INCLUDE_PATH://检查 filename 副本的内置路径
FILE_APPEND://在文件末尾以追加的方式写入数据
LOCK_EX://对文件上锁
context //可选,Context是一组选项,可以通过它修改文本属性
很多时候记录日志需要换行。不建议使用\r\n,因为:
在windows中\r\n是换行
在Mac中\r是换行
在Liunx中\n是换行
但是PHP提供了一个常量来匹配不同的操作系统,即:
PHP_EOL
file_put_contents("log.txt", "Hello world everyone.".PHP_EOL, FILE_APPEND);追问
滚犊子,你看题了吗,网上复制来的凑什么热闹,文不对题。
PHP中file_put_contents追加和换行
在PHP的一些应用中需要写日志或者记录一些信息,这样的话。
可以使用fopen(),fwrite()以及 fclose()这些进行操作。
也可以简单的使用file_get_contents()和file_put_contents().
file_put_contents()写文件。默认的是重新写文件,也就是会 替换原先的内容。追加的话使用参数FILE_APPEND
以追加形式写入内容 当设置 flags 参数值为
FILE_APPEND 时,
表示在已有文件内容后面追加内容的方式写入新数据
//log $tmpArr = array(); if($r->isGet){ $tmpArr = $r->get(); }else if($r->isPost){ $tmpArr = $r->post(); } $jsonStr = json_encode($tmpArr); $payLogFile = ‘./uploads/payLogs.txt‘; $newLog =‘log_time:‘.date(‘Y-m-d H:i:s‘).$jsonStr; file_put_contents($payLogFile, $newLog.PHP_EOL, FILE_APPEND);
很多时候记录日志需要换行。不建议使用\r\n,因为:
在windows中\r\n是换行
在Mac中\r是换行
在Liunx中\n是换行
PHP_EOL
file_put_contents
(
"log.txt"
,
"Hello world everyone."
.PHP_EOL, FILE_APPEND);
file_put_contents($payLogFile, $newLog.PHP_EOL, FILE_APPEND);
from:http://blog.csdn.net/u011335763/article/details/52860162
以上是关于php5.6的file_put_contents问题求解的主要内容,如果未能解决你的问题,请参考以下文章