2013-03-02 24 views
5

画像アップロードスクリプトに問題があります。php chmod()がアクセス権を変更していません

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

$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'; 
} 

これは、常に私が0777-rwxrwxrwxchmodを設定しようとしたファイルは、 "書き込み可能ではない" であることを

を返します。しかし結果は常に同じでした。何か案は?

+1

小数点の '777 'の場合は間違っています。常に「0」の接頭辞を付けてください。ここで[chmod](http://php.net/manual/en/function.chmod.php)をチェックしてください。 –

答えて

9

ディレクトリは、スクリプトを呼び出すユーザーが所有している必要があります(apache/* NIX設定でスクリプトを実行する場合は、通常www-data,またはhttpd)。ユーザーは所有していないディレクトリに対して777パーミッションを設定することはできません。

manual)(chmodコマンドで注意を参照してください:

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

+0

「ディレクトリはユーザが所有していなければならない」という点に同意します。 –

2

まず、あなたのコードの上2行を追加することで、オープンPHPのERROR_REPORT、chmodコマンドからのエラーがある場合は以下を参照してください

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

あなたのウェブサーバがそのディレクトリへのアクセス権を持っていることを確認し、私のWebServerには権限がないと推測されます。

+0

omgはエラーを報告するためにとても感謝しています。私はクロール・ロガーのようなものをインストールしようと壁に頭を叩いて、PHPのエラー報告をしていました。 – user124384

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; 
} 
?> 

私はこのコードを実行しませんでしたが、私はそれがOKだと思うと、それはあなたを助けるでしょう。 問題が解決した場合は教えてください。

0

ファイルがapache:apache(webserver user)によって所有されていましたが、chmodを使用して同様の問題が発生しました。

はsudo setenforce 0

とchmod作品:私の場合、SELinuxは、それは、この明らかに作られた無効、邪魔になりました。今度は、このケースでSELinux例外を作る方法を考え出すことに... (もちろん、SELinuxを有効にするのを忘れないでください)

+0

あなたの答えをより包括的にするために改善してください。 –

+0

ファイルの正しいユーザーとグループが設定されているため、これは私の特定のケースでの最良の答えです。 また、サーバー設定のテーマでは、私のウェブサーバー用に新しい 'umask'を設定することが最良の選択肢であることがわかりました:http://serverfault.com/a/384922/185510 – RibeiroBreno

関連する問題