【问题标题】:fopen Permission denied, Ubuntu, CodeIgniterfopen 权限被拒绝,Ubuntu,CodeIgniter
【发布时间】:2014-05-20 09:34:29
【问题描述】:

我正在为我的项目尝试fopen。它在带有 CodeIgniter PHP 框架的 Ubuntu 上运行。结果是这样的:

A PHP Error was encountered
Severity: Warning
Message: fopen(testFile.txt): failed to open stream: Permission denied
Filename: controllers/home.php
Line Number: 10

can't open file

顺便说一下,这是我在 Controller 上的代码:

public function create_file(){
    $ourFileName = 'testFile.txt';
    $ourFileHandle = fopen($ourFileName, 'r') or die ("can't open file");
    fclose($ourFileHandle);
}

我查看了那个代码,我认为应该有一个打开文件的路径,对吧?如果是,我应该把路径放在哪里?因为,我遵循了本教程中的这段代码:http://www.tizag.com/phpT/filecreate.php

让我感到困惑的是,没有文件testFile.txt 我想创建它,但是如何授予创建它的权限。因为终端会说No such file or directory for the file。我该怎么办?

我还尝试在www 目录上运行chmod。但是,它仍然没有工作。 希望有人帮我解决这个问题。谢谢...

【问题讨论】:

  • 您是否尝试使用 sudo 为该文件提供 chmod 777 或 755?

标签: php codeigniter ubuntu


【解决方案1】:

有两种方式:

1.) 通过此命令“sudo chmod -R 777 /var/www”将 www 目录 chmod 到 777。 这将递归地授予所有子文件夹和文件的权限。

2.) 如果您在第一步之后创建任何新文件夹(或 www 目录中的项目),请按照上述操作:

=> Right click on your current project folder
=> Scroll to Properties
=> Scroll to permissions
=> Add permission for "Create and Delete files" for owner, group, others.
=> Now click on "Change permission for enclosed files"
=> Give appropriate permissions for files and folders there.

全部完成。现在 fopen() 不应该给出那个警告。

【讨论】:

  • 谢谢你的建议,哈里。我已经尝试过了,但是当我单击“更改随附文件的权限”时,文件访问变为无(--)。我该怎么办?
  • 你好娜娜,首先通过这个命令 "sudo chmod -R 777 /var/www" chmod www 目录到 777,然后按照上面的过程。我的答案已修改。
【解决方案2】:
  1. 打开终端
  2. 转到包含 testFile.txt 的目录
  3. 类型:sudo chmod 755 testFile.txt(或使用777进行写入)

使用终端创建文件:

sudo touch testFile.txt

如果不存在,用php创建文件:

fopen('testFile.txt', 'w');

注意:如果您不是该文件夹的所有者,则不能写入。

确保父文件夹/目录至少有 755 chmod。

【讨论】:

  • 感谢您的建议,坎瑟。我试过了,但还是不行。让我感到困惑的一件事是,没有文件 testFile.txt 我想创建它,但是如何授予创建它的权限。因为终端会说“没有这样的文件或文件目录”。我该怎么办?
  • 您在 .php 文件所在的同一目录中搜索该文件。你意识到了吗?因此,您必须转到 .php 文件所在的目录,并在该目录中创建一个文件。
【解决方案3】:

我认为您需要更改要打开的文件的权限。此外,您没有提到是要读取还是写入文件。一般来说,您可以按如下方式授予文件权限:

chmod 777 testFile.txt

或者如果您希望完整的 www 目录及其内容递归地拥有所有权限,请尝试以下操作:

sudo chmod -R 777 www/

完成上述操作后,您应该可以打开文件,如下代码所示:

$handle = fopen("testFile.txt", "r"); // for reading

$handle = fopen("testFile.txt", "w"); // for writing

改变你的功能如下:

public function create_file(){
$ourFileName = 'testFile.txt';
$ourFileHandle = fopen($ourFileName, "w") or die ("can't open file");
fclose($ourFileHandle);

}

【讨论】:

  • 嗨,mSatyam。谢谢你的建议。我已经尝试过了,但仍然无法正常工作。让我感到困惑的一件事是,没有文件 testFile.txt 我想创建它,但是如何授予创建它的权限。因为终端会说“没有这样的文件或文件目录”。我应该怎么办?谢谢。
  • 如果文件尚未创建,您应该使用写入模式打开它,如果尚未创建文件,则会创建该文件。 $handle = fopen("testFile.txt", "w"); // 用于写作。我已经编辑了我的帖子,包括需要在您的代码中进行的更改。如果文件不存在,那么还有一件事为什么你要从中读取什么。只会从存在的文件中读取。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 2020-09-30
  • 2011-11-10
  • 2018-01-23
  • 1970-01-01
  • 2015-12-27
  • 2017-02-02
  • 2019-06-05
相关资源
最近更新 更多