2011-02-07 226 views
63

我想写一个查询文件进行调试。该文件在database/execute.php。我想要写入的文件是database/queries.phpfile_put_contents权限被拒绝

我试图用file_put_contents('queries.txt', $query)

但我正在逐渐

file_put_contents(queries.txt)function.file-把-内容]: 未能打开流:权限 否认

我有queries.txt文件chmod'd到777,问题是什么?

+0

你是否已经通过php.ini文件查看任何可能会拒绝文件访问的内容? – Hello71 2011-02-07 03:16:26

+2

也确保目录是chmod'd正确的 – 2011-02-07 03:21:04

+0

也尝试使用绝对文件名。这可能只是您对当前文件夹的解释与PHP的不同 – laher 2011-02-07 03:32:38

回答

58

尝试调整目录权限。

从终端,运行chmod 777 database(从包含该数据库文件夹的目录),如果它被正确chmodd'ed

Apache的,没有人会访问这个目录。

另一件事是回声“getcwd()”。这将向您显示当前目录,如果这不是'/something.../database/',那么您需要将'query.txt'更改为服务器的完整路径。

-10

此外,如file_put_contents man pagephp.net中所述,请注意命名问题。

file_put_contents($dir."/file.txt", "hello"); 

可能无法正常工作(即使它是正确的语法),但

file_put_contents("$dir/file.txt", "hello"); 

作品。我在不同的php安装的服务器上体验过这个

1

对于使用Ubuntu和加载页面时,本地收到此错误的人,而不是在网络托管服务,

我只是对你的文件打开了鹦鹉螺(sudo nautilus),右键点击这个固定试图打开,单击属性>设置>并给读写'其他人'

3

家伙,我有这个问题,1个月和所做的一切,但不能修复它,但现在我知道了解。

我使用共享的Linux托管,当我的管理员改变PHP为5.3我得到了许多错误的“file_put_contents”代码。尝试测试我的计划:

在主机创建像mytest.php文件,并把这个代码并保存:

<?php  mail('Your-EMail','Email-Title','Email-Message');  ?> 

打开URL“WWW。your-domain.com/mytest.php“一次,然后检查你的电子邮件,你应该收到你的主机发来的电子邮件,其中包含你在mytest.php中输入的信息,检查发件人的姓名,如果它来自没有人你有问题关于“权限被拒绝”,因为没有定义的东西,如果发件人名称就像我的ID:[email protected]你没有概率

我的管理员改变了服务器,并再次安装主机我认为和问题得到有效解决,告诉你的主机管理我告诉你,也许他们找到答案。

希望它可以帮助你!

-3

这里的解决方案。 从URL复制img。 这个网址:http://url/img.jpg

$image_Url=file_get_contents('http://url/img.jpg'); 

创建所需的路径与.jpg

$file_destino_path="imagenes/my_image.jpg"; 

file_put_contents($file_destino_path, $image_Url) 
3

我知道,这是一个非常古老的问题完成的名字,但我想有一些深入的加入很好的解决方案说明。你将不得不在系统上执行两个Ubuntu语句,然后它就像一个魅力一样。

Linux中的权限可以用三位数表示。第一个数字定义了文件所有者的权限。第二位数字是特定用户组的权限。第三位数字定义了不是该组所有者或所有组成员的所有用户的权限。

网络服务器应该使用作为该组成员的ID执行。 Web服务器不应该使用与文件和目录的所有者相同的ID运行。在Ubuntu下运行Apache下的ID数据。该ID应该是指定权限的组的成员。

为了让在您要更改文件的内容适当的权限,执行语句的目录:

find %DIR% -type d -exec chmod 770 {} \; 

。那将意味着在OP的问题,对于目录%的权限ROOT%/数据库应该相应地更改。因此,重要的是不要在该目录内具有永远不应该被更改或删除的文件。因此,为内容必须更改的文件创建单独的目录是最佳实践。

读取目录的权限(4)意味着能够收集所有文件和目录及其目录中的元数据。写权限(2)授予更改目录内容的权限。暗示添加和删除文件,更改权限等。执行权限(1)表示您有权进入该目录。没有后者,是不可能深入目录的。当文件的内容应该改变时,网络服务器需要读取,写入和执行权限。为此需要组数字7

第二条语句是在OP的问题:

find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \; 

能够阅读和书写的文件是必需的,但它要执行的文件,不需要。 7给予文件的所有者,6给该组。网络服务器无需拥有执行该文件的权限即可更改其内容。这些写入权限只应该赋予该目录中的文件。

所有其他用户不应被授予任何权限。

对于不需要更改文件的目录,组权限为5就足够了。 文档有关权限和一些例子:

https://wiki.debian.org/Permissions

https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions

http://www.linux.org/threads/file-permissions-chmod.4094/

-2

有2的方式来解决这个问题
1.使用chmod 777 path-to-your-directory
如果它不起作用,然后
2.只需提供文件query.txt的完整路径。

6

另一种选择

是,你可以使Apache (www-data),该文件夹

sudo chown -R www-data:www-data /var/www 

,应该让file_put_contents现在的工作的所有者。但是,为了更加安全,你最好也设置了权限,像下面

find /var/www -type d -print0 | xargs -0 chmod 0755 # folder 
find /var/www -type f -print0 | xargs -0 chmod 0644 # files 
  • 变化/var/www到PHP文件
1

从这个链接收集信息的根文件夹stackoverflow-image save doesn't work with chmod 777和用户azerafati和Loek伯格曼

如果您要查看/ etc/apache/envvars文件,您将看到类似于:

export APACHE_RUN_USER=www-data 
export APACHE_RUN_GROUP=www-data 

Apache是​​用户名“www数据”

“0755”下运行装置,该文件的所有者可以读/写/执行,但组与其他用户不能写入。所以在你的终端中,cd到包含你的'图像'文件夹的文件夹。然后键入:

find images -type d -exec chmod 0755 {} \; 
find images -type f -exec chmod 0755 {} \; 
sudo chown -R www-data:www-data images 

您必须在更改所有者之前先更改保留。当提示时输入密码 。这将使图像文件夹的'www-data'拥有者。

现在你的上传工作。