在 PHP 中保存并覆盖(如有必要)GD 文件

问题描述 投票:0回答:1

我在 PHP 中使用 GD 修改了一个文件,目前正在使用下面的代码保存它。但是,下面的代码不会覆盖现有文件。我需要做什么来覆盖现有文件或已存在的文件或创建一个新文件。我按照

这个问题
中的建议尝试了file_put_contents($target_path1,$temp),但这似乎不适用于GD图像。 预先感谢您的任何建议。

imagecopyresampled($temp, $image, 0, 0, 0, 0, $neww, $newh, $oldw, $oldh);
$target_path1 = "../tempfiles/";
$target_path1 = $target_path1 . $usertoken. "-tempimg.png";
imagepng($temp, $target_path1);//saves file temp to the targetpath
php save gd overwrite
1个回答
0
投票

像您正在做的那样使用功能

imagepng()

这是了解 PHP 是否覆盖现有文件的可靠方法。

如果不存在图像,则会创建一个新图像。

默认情况下,如果文件已存在,它将覆盖该文件。

我认为你所说的问题与文件权限或文件路径的处理方式有关。

@Jakkapong Rattananen

“我认为您用于运行 php 的用户没有权限写入您的文件路径。”

我也这么认为。

您的用户必须具有权限或路径必须可写。

确保将其设置为 777。

看一下完整的代码来做你想做的事情

// Resizing or modifying the image
imagecopyresampled($temp, $image, 0, 0, 0, 0, $neww, $newh, $oldw, $oldh);

$path = "../tempfiles/"; //it's yout path $target_path1
$path .= $usertoken . "-tempimg.png";

// CHECK PERMISSIONS - Ensure the directory exists and is writable !!!!!!!!!!!!!!!!!!!!!
if (!is_dir(dirname($path))) {
    mkdir(dirname($path), 0755, true);  // Create the directory (if it doesn't exist)
}

// CHECK PERMISSIONS - Make sure the file can be overwritten !!!!!!!!!
if (file_exists($path) && !is_writable($path)) {
    chmod($path, 0666);
}

// THEN FINALIZE

// Save the image, overwriting if it exists
imagepng($temp, $path);

// Cleanup for memory saving
imagedestroy($temp);
imagedestroy($image);

这基本上是您的代码,但有所改进。所以通过这种方式你可以检查你是否有权限(希望如此)。

如果您想确定或知道发生了什么,请在看到

else
的地方添加一些
echo
returns
// CHECK PERMISSIONS

干得好

© www.soinside.com 2019 - 2024. All rights reserved.