当我使用 ubuntu 12.04 时,我可以使用 php fopen(..) 创建文件。但现在我无法使用 php 创建文件,因为我通过了 ubuntu 14.04。我可以打开现有文件进行读取或写入。但由于权限被拒绝,我无法创建新文件。
fopen(../../../../../Desktop/file): failed to open stream: Permission denied in /var/www/html/createFolder.php on line 17
Cannot open file: ../../../../..//Desktop/file" error is occured.
$my_file = ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . "home" . DIRECTORY_SEPARATOR . "username" . DIRECTORY_SEPARATOR . "Desktop" . DIRECTORY_SEPARATOR . "file";
$handle = fopen($my_file, 'w') or die('Cannot open file: '.$my_file);
$data = 'New data line 1';
fwrite($handle, $data);
$new_data = "\n".'New data line 2';
fwrite($handle, $new_data);
答案1
该错误是由于权限问题而发生的。
您希望在用户桌面目录中创建一个文件。
您的脚本未被运行你的用户它由 apahce 的用户运行,通常是www-data
。此用户很可能没有权限在您的用户主目录中创建文件。
因此,您需要允许 apache 用户对您的桌面目录具有写访问权限。
笔记:这是一个坏主意但你还可以用其他几种方法来实现。
1.将 apache 用户添加到您的用户组。
2. 更改桌面目录的权限以允许任何人对其进行写入(可能是最糟糕的想法)。
3.将您自己添加到www-data
群组,并将桌面文件夹的组所有者更改为www-data
。
使用任何这些技术时都要小心,因为它们会将您的主目录开放给其他人。
无关:为什么要用这么多..
?只需使用绝对路径即可。
答案2
您需要有权限才能在 中创建该文件../../../../../Desktop
。
因为 php 代码是以 apache 用户权限执行的。
如果您想要它,您必须使用以下命令进行检查和更改。
ls -l ../../../../../Desktop
sudo chmod 777 ../../../../../Desktop
或者
sudo chown xxx ../../../../../Desktop
这xxx是 apache 用户名。