6

PHPで画像をアップロードした後、透かしを入れるために画像ファイルを書き込み可能にしたい。使用したコードは次のとおりです。

if(isset($_FILES['file_poster']['tmp_name']) && $_FILES['file_poster']['tmp_name'] != '') {
        $random_filename = substr(md5(time()), 0, 9);
        $ext = '.jpg';
        if(strpos(strtolower($_FILES['file_poster']['name']), '.png') > -1) {
            $ext = '.png';
        }

        move_uploaded_file($_FILES['file_poster']['tmp_name'], 'uploads/' .  $random_filename . $ext);
        chmod(ABS_PATH . $random_filename, 0666);
        $random_filename = 'uploads/' .  $random_filename . $ext;

        // add watermark codes omitted
}

ファイルがアップロードされると、ファイルのパーミッションは644になります。次にchmod()、書き込み可能(666)に変更しようとしましたが、権限は変更されません。

フォルダの/uploadsパーミッションは777です。chmod()関数が許可の変更に失敗する理由はありますか? または回避策はありますか?

注: PHP 5 が使用されます。GDは正常に動作しています。

4

1 に答える 1

15

最後の 2 行を交換する必要があるようです。

$random_filename = 'uploads/' .  $random_filename . $ext;
chmod(ABS_PATH . $random_filename, 0666);

などの相対パスを使用する場合は十分に注意してください'uploads/' . $random_filename . $ext。作業ファイルが別のファイルに含まれている場合、現在のディレクトリが異なる場合があります。

私はこのようなものをお勧めします

$destFile = __DIR__ . '/uploads/' . $random_filename . $ext;
move_uploaded_file($_FILES['file_poster']['tmp_name'], $destFile);
chmod($destFile, 0666);

魔法の__DIR__定数には、実際にいるファイルの親ディレクトリへの絶対パスが常に含まれています。

于 2013-03-07T04:32:18.287 に答える