фонPHP изображений водяных знаков на лету
Я прочитал много сайтов, включая этот для решения. У меня есть сценарий водяных знаков, который до нескольких месяцев назад работал безупречно. Мой хостинг-провайдер выполнял рутинные обновления и закрывал мой скрипт. Я сделал одну корректировку, это сработало. Со временем сценарий водяного знака кажется очень тяжелым для системных ресурсов, вызывая всевозможные проблемы с моим сайтом, включая изображения, которые не загружаются наугад и т. Д. В настоящее время, похоже, я могу запустить сайт на PHP версии 5.4 или версии или двух выше и ниже. В настоящее время работает в 5.4, если это поможет.
Объяснение
Скрипт предназначен для поиска файлов изображений из определенного места, до по размеру, в сочетании с одним из нескольких PNG изображений на лету без перезаписи исходного изображения.
Сценарий
Я изменил мой сценарий значительно на прошлой неделе, с незначительным улучшением производительности. Я нахожусь на своем пути, есть ли улучшения в этом скрипте, который будет сделан или более чистый код. Любая помощь будет очень признательна.
Файлы .htaccess, три jpg (ы) и сценарий watermark.php.
.htaccess
RewriteRule ^(.*)wp-content/uploads/(.*) $1watermark.php?src=wp-content/uploads/$2
watermark.php
<?php
$src = $_GET['src'];
if(preg_match('/.gif/i',$src)) { $image = imagecreatefromgif($src); }
if(preg_match('/.png/i',$src)) { $image = imagecreatefrompng($src); }
if(preg_match('/.jpeg/i',$src)||preg_match('/.jpg/i',$src)) { $image = imagecreatefromjpeg($src); }
if (!$image) exit();
// if (empty($images)) die();
if (imagesx($image) > 301) { $watermark = imagecreatefrompng('watermark.png'); } // height greater than 301 then apply watermark 600x600
elseif (imagesx($image) > 175) { $watermark = imagecreatefrompng('watermarksm.png'); } // height greater than 175 then apply small watermark 200x200
else { $watermark = imagecreatefrompng('empty.png'); } // apply a dummy watermark resulting in none. 1x1
$dest_x = imagesx($image) - imagesx($watermark) - 0;
$dest_y = imagesy($image) - imagesy($watermark) - 0;
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, imagesx($watermark), imagesy($watermark));
header('content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
//die();
?>
Несколько вещей, которые я попробовал не отражены в этом сценарии заключается в следующем "незначительные" изменения.
if(preg_match('/.gif/i',$src))
к if(preg_match('/\.gif$/i',$src))
Еще один вариант в попытке preg_match был с jpe$g
и jp(|e)g$
. Эти изменения, похоже, никоим образом не помогли, и, похоже, они ухудшили работу.
Опять же, любое руководство будет оценено по достоинству. Заранее спасибо.
Кэш модифицированного файла? – symcbean
Вы можете проверить один из моих ответов [здесь] (http://stackoverflow.com/questions/7933262/how-to-prevent-having-the-is-not-a-valid-image-file-error-when -using-gd-functi/7933349 # 7933349) - таким образом вы можете открывать изображения без проверки типов файлов. – Mikk
Это был интересный подход для очистки всех строк кода preg_match, но, к сожалению, он не улучшил производительность. – canon