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);

どれも機能しません...どうすればいいですか?ところで、作業が完了したら、権限を元に戻す必要がありますか?

ありがとう!

UPDATE私はchmod('.', 0777)を試しましたが、これは私が得たエラーです:

Warning: chmod(): Operation not permitted

このファイルを作成しようとしている唯一の理由は、別の場所に FTP で転送できるようにするためです。それで、もっと良い方法があれば?ファイルをメモリに保存して送信するのと同じように(それが可能かどうかわかりません)?また、PHP4を使用しています。ありがとう!

4

6 に答える 6

1

また、実行中の Apache サーバー (Apache の場合) が、そのディレクトリのアクセス許可を変更するためのアクセス権を持っていない可能性もあります。ユーザー/グループとしてルート/ルートを持つことができ、ApacheはApacheグループまたはwwwuserなどで実行されます。

親ディレクトリでals -lを実行し、このフォルダにアクセスできるユーザーとグループを確認します。

于 2009-06-02T21:07:31.523 に答える
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

現在のディレクトリの権限を変更するには、次を使用します

chmod('.', PERMISSION);

0777、つまり全世界で読み書き可能が本当に必要ですか? 私にはとても緩いようです!

編集:あなたの提案 chmod('../containingfolder/', 0777); も機能するはずです。発生するエラーについて、より詳細に説明できますか?

于 2009-06-02T21:04:21.593 に答える
0

php を実行しているユーザーがエントリを変更できない場合、エントリのアクセス許可を設定することはできません。apache の構成を見て、実行しているユーザーを検索します (デフォルトでは www-data です)。今後これらを回避するには、デフォルト グループと同じグループに設定し、ドキュメント ルートに 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する権限が必要な場合は、sudoを-Sオプションで使用し、rootパスワードをSTDINにパイプして取得する方法を理解する必要があります。特権。

于 2009-06-03T04:27:05.543 に答える