1

重複の可能性:
ここで頭がおかしくなり、rename()、copy() 関数が機能しない理由がわかりません。

次のエラーが表示されます。

警告: copy(/fullpathtofile/a4d3af69.jpeg) [function.copy]: ストリームを開くことができませんでした: 行 31 の /var/www/vhosts/site.com/httpdocs/application/controllers/WorkController.php で許可が拒否されました

アクセス許可は 775 に設定されています。これは 777 でのみ機能しますが、専用サーバーにあるソーシャル ネットワーク サイトには適切な方法ではないと思います。これは安全上の問題ですよね? それが私の唯一の修正ですか?copy() が機能するはずだと思っていました。

4

5 に答える 5

4

Web サーバーのユーザーには、コピー先のディレクトリに書き込むための十分な権限がありません。

問題を解決するためのウォークスルー

  1. chmodへの「ターゲット」ディレクトリ777
  2. スクリプトがそのディレクトリにファイルを書き込むようにします。
  3. 書き込まれたファイルを検査し (ls実行します)、それを所有しているユーザーを確認します
  4. これは、Web サーバー プロセスが実行されているユーザーです。
  5. ターゲットディレクトリがそのユーザー(この場合はそうします) またはそのユーザーのグループ(この場合はそうします)によって所有されていることを確認してください。chmod 755chmod 775
于 2011-04-04T13:51:03.260 に答える
1

775 に設定されている権限は何ですか? ターゲットなら書き込み権限が必要ですし、そうでなければその場所に書き込めませんか?

于 2011-04-04T13:51:15.413 に答える
1

/fullpathtofile の所有権を、Web サーバーを実行しているユーザーに設定する必要があります。これは、その中のファイルにも当てはまります。PHP から保存されたすべてのファイルは、そのユーザーが所有します。アップロードしたファイルをそのディレクトリに保存していると仮定しています。それ以外の場合、これはソースと宛先の両方に当てはまります。

于 2011-04-04T13:51:17.183 に答える
1

chownPHP スクリプトを実行するユーザーが所有する関連ディレクトリ ( get_current_user()を参照)。

編集:これは間違っています。コメントを参照してください。実際に使用したいユーザーchownは、Web サービスを実行しているユーザーです。これは一般nobodyapachewww-data、 などであり、通常は で決定できますps aux | grep httpd

于 2011-04-04T13:53:18.270 に答える
1

専用を使用している場合は、777 に問題はありません。

関連するすべてのネストされたディレクトリの権限と所有者を確認する必要があります。

ls -laモール。

于 2011-04-04T13:59:45.480 に答える