PHP file_put_contents函数写入不了txt文件 代码如图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP file_put_contents函数写入不了txt文件 代码如图相关的知识,希望对你有一定的参考价值。
表单那些没有错,是user但是按注册以后数据不会写入txt里 怎么写? 我一打开网页的时候就有一个警告,为了美观我用@隐藏了,最关键我想知道怎么把user表单里面输入的内容按注册以后写入file.txt文本里
1、查看一下你写入的文件路径是否正确
2、那个文件是否有写入的权限
3、file_put_contents方法是否存在
依据你给的代码图片,将其修改了一下,你试试看看行不行:
<?phpif($_POST['Submit'] == '注册')
$a = 'file.txt';
$c = $_POST['user'];
// 如果$c是一个数组,先foreach循环 - 组装成需要写入发内容
if(is_array($c))
foreach ($c as $k => $v)
$html = '这是写入的内容'."\\r\\n";
$html .= '写入的内容要是字符串!'."\\r\\n";
$html .= '.....';
$c = $html;
// 写入
if(file_exists('file_put_contents'))
file_put_contents($a, $c);
else
$handle = fopen($a, 'w+');
fwrite($handle, $c);
fclose($handle);
?>
若有任何疑问,欢迎追问......
检查执行结果是否如下警告:
Warning: fopen(xxx.txt): failed to open stream: Permission denied in /usr/local/www......
这是因为默认下selinux是开启的,会阻值修改文件。
查看SELinux状态:
1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
SELinux status: enabled
2、getenforce ##也可以用这个命令检查
关闭SELinux:
1、临时关闭(不用重启机器):
setenforce 0 ##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
另外,如果以上还是不能解决的话要设置一下目录的权限策略
chcon -R -t httpd_sys_content_t /home/html 参考技术B
PHP 使用file_put_contents函数写入文件示例:
<?phpheader("Content-type: text/html; charset=utf-8");
//文件目录[项目/test/]
$dor_path="test/";
//权限
@chmod($dor_path,0777);
//文件路径
$write_file=$dor_path."zhidao.txt";
//写入内容
$content="当前的时间戳是:".time();;
//判断写入
if (is_writable($write_file))
file_put_contents($write_file, $content."\\r\\n",FILE_APPEND);
echo "文件写入成功!".time();
else
echo "请检查zhidao.txt文件是否有写入权限!";
参考技术C 翻译:
file_put_contents(/PHP/admin/tp/runtime/temp/71dafaa2a0ea0d586666de9d67f301a7.php):无法打开流:权限被拒绝
解决办法:
文件或目录需要的权限是很大的,如果你只给一般权限肯定是不行的,通常都是给runtime权限:777;
详细命令请参考:https://panxu.net/article/8394.html 参考技术D 文件路径对么,文件写的权限有木有,,,,追问
file.txt和我这个文件在跟目录 但如果把变量c随便改成123456这样就能写入 $_POST的提交方式就不能写入了 有权限写入的 而且表单是user
还有提示这个
php file_put_contents 函数不起作用
【中文标题】php file_put_contents 函数不起作用【英文标题】:php file_put_contents function not working 【发布时间】:2011-06-02 09:44:28 【问题描述】:为什么 file_put_contents 会拒绝为以下代码工作?
$f = file_put_contents("files/r.js", "Some text here");
if ($f) print 1;
else print 0;
【问题讨论】:
如果您删除该代码会发生什么......页面的其余部分是否呈现正常? 谁是“它”,谁给你报错?您以什么形式收到此错误?你确定你能看到 PHP 错误吗? 你读过这个问题吗?他说错误报告已开启。如果您不打算阅读,请不要制作 cmets 或回答问题。 @jmort253 让您知道,如果错误报告真的打开,可以看到完整且明确的错误消息。如果没有 - 则错误报告未正确打开。这就是逻辑。 嗯,虽然error_reporting
可以开启,但是display_errors
开启了吗?否则错误将被记录但不会显示在页面中。
【参考方案1】:
可能是权限问题
目录/files
chmod 为777 吗?如果目录没有足够的权限,有时 php 将不允许您访问目录。不过我不知道空白错误。
试试看是否有足够的权限,如果没有,则设置为777试试看。
【讨论】:
这是一个糟糕的答案和一个坏主意:***.com/questions/2338641/… 换句话说,你给了任何人足够的权限来写东西。 . @joemurphy 如果您在生产环境中执行此操作,然后将 777 留在那里(如果它有效),这只是一个坏主意,而不是将测试视为简单地旨在显示或消除权限的可能性一个问题作为向前迈出的一步。我认为答案应该已经说清楚了。 很好的答案,Famver:你救了我很多痛苦!我建议人们也看看这个相关的问题,以获得关于正确目录权限的好建议(参见“错误答案”cmets):***.com/questions/4917811/… @Parapluie 但是当您尝试 777 后,您必须找出它应该拥有的用户和组并解决问题。 777 只是故障排除过程中可以使用的一个步骤,以后不能使用它,因为从安全角度来看这是一个坏主意。【参考方案2】:您是在文件系统上使用完整路径还是尝试使用 URI?我认为这个 PHP 函数希望您在文件系统上找到文件时提供路径。
不过,相对路径应该没问题。
您可能需要确保文件存在并且它的权限设置为 777。有时我发现仅将目录权限设置为 777 是不够的,但文件也必须已经存在。
【讨论】:
这不是猜测。这是我的专业经验。我遇到过无法写入文件的情况,除非该文件存在。你从哪里得到“猜测”???您甚至阅读了问题和答案吗? 这是一个糟糕的答案和一个坏主意:***.com/questions/2338641/…【参考方案3】:这是因为 SELINUX。
您可以使用此命令将文件夹标记为 httpd_sys_rw_content_t 类型,以允许写入此文件夹。
semanage fcontext -a -t httpd_sys_rw_content_t '/files(/.*)?'; restorecon -RF '/files/'
【讨论】:
【参考方案4】:我们遇到过这种情况,需要一种解决方法(不管方法、权限和此处提到的任何其他内容)。当所有其他修复都失败时,我们发现它可能与 SELinux 创建的限制有关。
【讨论】:
【参考方案5】:如果您使用的是 Windows,则以下解决方案在运行 php 5.5.38 的 Windows 10 上非常适合我
如果您在 Windows/IIS 上遇到此问题,请尝试以下操作:
-
转到您尝试写入的文件夹并右键单击它,然后选择属性。
选择安全选项卡
点击编辑
点击添加
点击高级
点击立即查找
从用户列表中选择IUSR并点击确定
再次单击“确定”。
IUSR 将显示在标有“用户名组”的顶部框中
在“BATCH 权限”列表视图中选择 IUSR 并授予必要的权限。
单击应用,然后您就完成了。
对于不同版本的 windows,步骤可能会略有不同。这也适用于 ASP.NET,尽管我认为您添加的用户是网络用户(NETWORK AND OR NETWORK SERVICE 用户)以及 IUSR。
【讨论】:
我遇到了类似的问题,我通过选择禁用上传文件夹上的所有继承来管理用户权限,意外删除了所有用户。如果您已经这样做了,那么这些是重新创建 IUSR 的重要说明;但是,在大多数用例中,您应该能够仅禁用 IUSR 上的继承,然后直接修改其权限。以上是关于PHP file_put_contents函数写入不了txt文件 代码如图的主要内容,如果未能解决你的问题,请参考以下文章
详解PHP file_put_contents() 函数用法示例