【问题标题】:Writint to a .txt file with php in unix enviroment where file need root permisions在文件需要root权限的unix环境中使用php写入.txt文件
【发布时间】:2014-02-16 08:05:18
【问题描述】:

好的,现在这对我来说完全令人困惑,我无法弄清楚为什么这个脚本不起作用基本上我正在尝试将一行数据写入 php 中的 .txt 文件 这是脚本中重要的部分:

    set_include_path('/etc/apache2/rewrite/');
    if($_GET['type']=="14"){ //video is documentary
         $file = '/etc/apache2/rewrite/Documentaries.txt';
         $line= clean_url($content[0]['title']) . " " . $content[0]['content_id'] ."\n";
         file_put_contents($file, $line, FILE_APPEND);

            echo "inseted into documentaries <br>" . $line;
    }else if ($_GET['type']=="17"){//video is a talk
         $file = '/etc/apache2/rewrite/Talks.txt';
         $line= clean_url($content[0]['title']) . " " . $content[0]['content_id'] ."\n";
         file_put_contents($file, $line, FILE_APPEND);
            echo "inseted into talks";

    }else if($_GET['type']=="15"){//video is debate
         $file = '/etc/apache2/rewrite/Debates.txt';
         $line= clean_url($content[0]['title']) . " " . $content[0]['content_id'] ."\n";
         file_put_contents($file, $line, FILE_APPEND);
                            echo "inseted into debates";
   }

请注意,在此块之后,我会回显$line,就像这样

   inside-nature-s-giants-the-leatherback-turtle 13443

if 语句中的 echo 也被回显,但是在任何文件中都没有修改任何内容,原因是我似乎无法弄清楚我已授予脚本写入和执行权限并且似乎仍然无法使其正常工作.. 我不确定发生了什么因为我在其他脚本中使用类似的逻辑没有问题任何帮助将不胜感激,因为我已经发誓我的终端有点合我的胃口 谢谢, 布伦丹


*更新 * 感谢@SyntaxLAMP 提醒我检查错误日志,我没有正确的文件权限

好的,这里是php文件的权限

-rwxrwxrwx 1 root root 9202 Jan 25 07:48 update_untagged.php

以及我尝试写入的三个文件的权限

-rw-r--r-- 1 root root      7 Jan 25 05:05 Debates.txt
-rw-r--r-- 1 root root 110691 Jan 25 07:16 Documentaries.txt
-rw-r--r-- 1 root root  45747 Jan 25 05:05 Talks.txt

他们都有相同的权限,所以我不明白为什么这仍然不起作用

【问题讨论】:

  • 您是否遇到任何错误?您是否打开了错误日志记录?
  • 没有,我可以看到虽然这是通过 html 表单...甚至没想过要检查日志... brb
  • 好吧,是的,当我试图打开文件时,我得到一个权限被拒绝的错误......有没有办法以 root 身份运行从 html 访问的 php 脚本?因为脚本已经有了 -rwxrwxrwx
  • 您可能需要授予运行 PHP 脚本的任何用户访问文件的权限,而不仅仅是脚本。
  • @SyntaxLAMP 只是在更新检查更新是否应该文件已经没有这些权限?如果不是,我怎么能授予他们

标签: php unix file-io file-permissions


【解决方案1】:

您需要向正在运行脚本的用户授予对这些文件的访问权限。您可以像这样让每个人都可以访问它们:

chmod 666 Debates.txt Documentaries.txt Talks.txt

或者将所有者设置为脚本运行的任何内容(可能是 www-data):

chown www-data Debates.txt Documentaries.txt Talks.txt

编辑:

要明确一点,除非有正当理由,否则不要授予所有人访问权限,将所有者更改为脚本运行的任何内容会更安全。

【讨论】:

  • 非常感谢...脚本本身受登录名/密码保护,只有我可以访问,现在的 adin 这就是您所说的don't give everyone access...我的推理如上所述是这个脚本允许我对内容进行分类,并且 .txt 文件是 apache 重写模块所需要的......我真的想不出另一种方法来做到这一点,尽管我知道我目前的解决方案没有得到强化
  • 不要让每个人都可以访问我的意思是 chown 方法比 chmod 方法更安全。如果此服务器仅供您使用,这不是真正的问题,但如果它是共享服务器并且您不希望其他人能够编辑文件或脚本,那么您不想给每个人写权限(这chmod 666 确实)。
  • 服务器只被访问扔给我即。通过带有 ssh 的终端,但这将在未来的某个时候成为一个实时网站。这应该是我在启动网站之前解决的问题吗?
  • 只要不是共享服务器(即多人拥有 ssh 访问权限,而您不信任他们)就可以。
猜你喜欢
  • 2016-01-26
  • 2018-02-14
  • 2015-12-31
  • 2021-09-01
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
相关资源
最近更新 更多