简体   繁体   中英

PHP : add write permission to file after move_uploaded_file()

After an image is uploaded with PHP, I want to make the image file writable in order to add a watermark to it . Here are the codes I used:

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
}

After the file is uploaded, the file permission becomes 644 . Then I tried to use chmod() to change it to writable ( 666 ), but the permission doesn't change.

The /uploads folder has permission 777 . Is there any reason that makes chmod() function fails to change permission? or is there a workaround?

Note: PHP 5 is used. GD is working properly.

Looks like you need to swap your last two lines, eg

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

Be very careful when using relative paths such as 'uploads/' . $random_filename . $ext 'uploads/' . $random_filename . $ext 'uploads/' . $random_filename . $ext . If the working file is included into another file, the current directory may differ.

I would recommend something like this

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

where the magic __DIR__ constant always contains the absolute path to the parent directory of the file you're actually in.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM