fopen()在Linux上无法创建文件

8
我试图通过以下方式使用fopen()创建一个文件:
<?php 
  $handle = fopen('name.txt', 'w') or die('Can\'t create file');
  fwrite($handle, 'Hamed'."\n");
  fwrite($handle, 'Kamrava'."\n");
  echo 'File was created successfully';
?>

但是并没有创建该文件,返回了以下错误信息:

无法创建文件

P.S :

我正在使用 Linux/Ubuntu 上的 LAMP 服务器。

在创建该文件之前,我尝试过以下命令:

sudo chmod -R 755 ~/public_html/

如果您有任何想法,将不胜感激。


1
你确定 ~/public_html/ 是当前工作目录吗?你尝试过使用绝对文件名吗? - Alex Shesterov
@AlexShesterov 是的,我确定工作目录。你所说的绝对文件名是什么意思? - Hamed Kamrava
绝对文件名是/path/and/file.name。但如果当前工作目录设置为~/public_html/,那么使用绝对文件名也无济于事。与此同时,您已经得到了答案 :) - Alex Shesterov
3个回答

9

PHP脚本是以为Apache Web服务器配置的用户身份执行的。要创建文件,此用户必须对您希望创建文件的目录具有写入权限。有两种方法可以实现这一点:

您可以为所有用户授予目录的写入权限,其中包括为Apache配置的任何内容(对于开发机器来说已经足够好):

chmod o+w ~/public_html/directory_where_you_want_to_write

或者您可以将目录的所有权转移给Apache用户。这意味着,除非您执行上述操作,否则您使用常规用户帐户将无法在此目录中创建或删除文件。假设Apache使用www-data用户帐户运行(在Ubuntu上默认情况下是这样),您应该执行以下操作:

sudo chown www-data ~/public_html/directory_where_you_want_to_write

(这个目录不一定要在public_html下,我只是举例而已,因为那似乎是你的文件所在的地方。)

2
您可以将用户放入适当的组(www?),然后授予该组写入访问权限。 - glglgl

0

文件夹必须归属于 Apache 用户,因此:

sudo chown -R www-data:www-data ~/public_html/

0

将文件夹(您尝试创建的文件夹)的权限更改为所有权限

sudo chmod 777 

2
什么是 ur tring - user330315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接