1

我正在尝试使用 PHP 创建一个文件,这是我的代码:

$file_to_send = 'ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);

这显然给了我一个错误,因为我正在尝试对尚不存在的文件设置权限。虽然如果我跳过 chmod 调用,我会收到另一个错误,告诉我我没有设置权限。所以要么我处于生病的鸡与蛋的循环中,要么我需要设置包含目录的权限......但是如何?它尝试了所有以下内容:

chmod('../containingfolder/', 0777);
chmod('../', 0777);
chmod('', 0777);

没有一个工作......我该怎么办?哦,顺便说一句,一旦我完成了,我需要改回权限吗?

谢谢!

更新我试过chmod('.', 0777)这是我得到的错误:

Warning: chmod(): Operation not permitted

我试图制作这个文件的唯一原因是我可以将它通过 FTP 传输到其他地方,然后我计划 unlink() 它。那么是否有更好的方法呢?就像可能将文件存储在内存中以发送它(不知道这是否可能)?我也在使用PHP4。谢谢!

4

6 回答 6

1

也可能是正在运行的 apache 服务器(如果它是 apache)无权更改该目录的权限。它可以将 root / root 作为用户 / 组,并且 apache 在 apache 组或 wwwuser 或其他东西上运行。

在父目录上执行 als -l并查看哪些用户和组有权访问此文件夹。

于 2009-06-02T21:07:31.523 回答
0

要更改当前目录的权限,请使用

chmod('.', PERMISSION);

你真的需要0777,即世界可读写吗?对我来说似乎很松懈!

编辑:您的建议 chmod('../ containsfolder/', 0777); 应该也有效。你能更详细地说明你得到的错误吗?

于 2009-06-02T21:04:21.593 回答
0

在您的文档根目录之外创建一个目录,我们将调用该目录,$tmpFolder确保运行 Web 服务器的用户对其具有读/写权限。然后是以下内容:

$file_to_send = $tmpFolder . '/ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);
于 2009-06-02T21:09:50.707 回答
0

如果运行 php 的用户无法修改条目,则无法设置条目的权限。查看 apache 的配置,搜索运行它的用户(默认为 www-data)。为了将来避免这些,请将自己设置为与默认组相同的组,并给文档 root chmod -R g+a

于 2009-06-02T22:19:22.923 回答
0

如果当前用户可以写入目录,您应该可以使用file_put_contents().

<?php
$file = 'file_to_write.txt';
$data = "Tab\tseparated\tvalues\nMore\tseparated\tvalues";
file_put_contents($file);

如果您没有写入当前目录(或任何目录)的权限,您将无法创建该文件,更不用说chmod它了。

如果您可以发布从chmod()命令中获得的错误,那将有所帮助。

chmod('.',0777);

应该管用。

于 2009-06-02T22:49:04.767 回答
0

如果您想维护 chroot 监狱,但仍需要对当前目录进行 chmod 的权限,您将必须弄清楚如何使用带有 -S 选项的 sudo 并将 root 密码通过管道传输到 STDIN 以获得特权。

于 2009-06-03T04:27:05.543 回答