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

看起来你需要交换你的最后两行,例如

$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 回答