我在 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
像您正在做的那样使用功能
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
。
干得好