9

画像アップロードスクリプトに問題があります。

同じ質問が何百もあることは知っていますが、私に役立つ質問は見つかりませんでした。

$upload_dir = "images/postcards/";
chmod($upload_dir, 777);
if (is_writable($upload_dir)) {
    echo 'The file is writable';
} else {
    echo 'The file is not writable';
}

これは常にファイルが「書き込み不可」であることを返します

とに設定chmod0777てみまし-rwxrwxrwxた。しかし、結果は常に同じでした。何か案は?

4

4 に答える 4

13

ディレクトリは、スクリプトを呼び出すユーザーが所有している必要があります(通常www-dataapacheまたはhttpdapache / * NIXセットアップでスクリプトを実行している場合)。ユーザーは、自分が所有していないディレクトリに777のアクセス許可を設定することはできません。

chmod()マニュアルの注記を参照してください:

現在のユーザーは、PHPを実行するユーザーです。通常のシェルまたはFTPアクセスに使用するのと同じユーザーではない可能性があります。モードを変更できるのは、ほとんどのシステムでファイルを所有しているユーザーのみです。

于 2013-03-02T01:40:54.653 に答える
2

まず、コードの上に2行追加してPHP error_reportを開き、chmodからエラーが発生するかどうかを確認します。

ini_set('display_errors', true);
error_reporting(E_ALL);

Webサーバーにそのディレクトリへのアクセス許可があることを確認してください。Webサーバーにアクセス許可がないのではないかと思います。

于 2013-03-02T01:58:28.630 に答える
1

ファイルはapache:apache(ウェブサーバーユーザー)が所有していましたが、chmodを使用しても同様の問題が発生していました。私の場合、SELinuxが邪魔をしていて、それを無効にすると次のことが明らかになりました。

sudo setenforce 0

そして、chmodは機能します。次に、この場合にSELinux例外を作成する方法を理解します...(もちろん、SELinuxを有効にすることを忘れないでください)

于 2014-07-15T08:23:36.573 に答える
0

私はすでに同じ問題を抱えていました。このコードでファイルのアクセス許可を変更できます。

<?php
$ftp_details['ftp_user_name'] = 'your ftp username';
$ftp_details['ftp_user_pass'] = 'your ftp password';
$ftp_details['ftp_root'] = '/public_html/';
$ftp_details['ftp_server'] = 'ftp' . $_SERVER['HTTP_HOST'];
function ftp_chmod($path, $mod, $ftp_details) {
  extract($ftp_details);
  $conn_id = ftp_connect($ftp_server);
  $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// try to chmod $path directory
  if (ftp_site($conn_id, 'CHMOD ' . $mod . ' ' . $ftp_root . $path) !== false) {
    $success = true;
  }
  else {
    $success = false;
  }

  ftp_close($conn_id);
  return $success;
}
?>

私はこのコードを実行しませんでしたが、大丈夫だと思います。問題が解決したかどうか教えてください。

于 2013-07-10T16:31:49.730 に答える