تغيير الكود ليتوافق مع تفعيل خاصية safe mode - nnnjk - 04-04-26
السلام عليكم ورحمة الله وبركاته
هذا الكود كان يعمل بدون مشاكل يختم الصور من الرابط او المرفقات
ولاكن عندما انتقلت الى استضافة تعمل على السيف مود وتجعل الرفع عن طريق مجلد مؤقت tmp فليت احد الاخوه
يعدل الكود ليتوافق مع خاصية الحماية الفائقه للسيرفر
هذا الكود
PHP كود : <?php // ####################### SET PHP ENVIRONMENT ########################### error_reporting(E_ALL & ~E_NOTICE); @header('Content-type: text/html;charset=windows-1256'); //ini_set('default_charset','windows-1256'); // #################### DEFINE IMPORTANT CONSTANTS ####################### define('NO_REGISTER_GLOBALS', 1); define('THIS_SCRIPT', 'watermark'); $MDIR = dirname(__FILE__); define("MDIR", $MDIR);
// ################### PRE-CACHE TEMPLATES AND DATA ###################### // get special phrase groups $phrasegroups = array();
// get special data templates from the datastore $specialtemplates = array();
// pre-cache templates used by all actions $globaltemplates = array();
// pre-cache templates used by specific actions $actiontemplates = array();
// ######################### REQUIRE BACK-END ############################ require_once('./global.php');
// ####################################################################### // ######################## START MAIN SCRIPT ############################ // #######################################################################
$image = $_GET['src']; $minwidth = $vbulletin->options[watermarkwidthdef]; $fontsize = $vbulletin->options[watermarkfontsize]; $bandheight = $vbulletin->options[watermarkbandheight]; $fontname = $vbulletin->options[watermarkfontname]; $wmrkimage = $vbulletin->options[watermarkimage];
$imagetype = getimagesize($image); switch ($imagetype['mime']) { case "image/gif": $im = @imagecreatefromgif($image); break; case "image/jpeg": $im = imagecreatefromjpeg($image); break; case "image/png": $im = imagecreatefrompng($image); break; case "image/bmp": $im = imagecreatefrombmp($image); break; case "image/webp": $im = imagecreatefromwebp($image); break; } if(!empty($wmrkimage)){ $wmrkimagetype = getimagesize($wmrkimage); switch ($wmrkimagetype['mime']) { case "image/gif": $stamp = @imagecreatefromgif($wmrkimage); break; case "image/jpeg": $stamp = imagecreatefromjpeg($wmrkimage); break; case "image/png": $stamp = imagecreatefrompng($wmrkimage); break; case "image/bmp": $stamp = imagecreatefrombmp($wmrkimage); break; case "image/webp": $stamp = imagecreatefromwebp($wmrkimage); break; } }
$imagewidth = imagesx($im);
if(empty($vbulletin->options[watermarktext])){ $watermarktext = $vbulletin->options[bbtitle]; } else { $watermarktext = $vbulletin->options[watermarktext]; }
if($imagewidth <= $minwidth){ switch ($imagetype['mime']) { case "image/gif": header ("Content-type: image/gif"); readfile($image); break; default: header ("Content-type: image/png"); imagegif($im); imagedestroy($im); break; } } else {
if(empty($wmrkimage)){ //require_once('./I18N/Arabic.php'); //$Arabic = new I18N_Arabic('Glyphs'); //$text = 'بسم الله الرحمن الرحيم'; $watermarktext = "الشعافينمنحرب"; //$watermarktext = $Arabic->utf8Glyphs('$watermarktext'); $stamp = imagecreatetruecolor($imagewidth, $bandheight); $ypoint = $fontsize+round(($bandheight - $fontsize)/2); $ffontname = MDIR."/includes/fonts/".$fontname; ImageTTFText($stamp, $fontsize, 0, 15, $ypoint, 0xFFFFFF, $ffontname, $watermarktext); } $marge_right = 0; $marge_bottom = 0; $sx = imagesx($stamp); $sy = imagesy($stamp); imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50);
header ("Content-type: image/png"); imagepng($im); imagedestroy($im); } ?>
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - Amir_Alzubidy - 04-04-26
عليكم السلام
بالمناسبة حل مشكلة safe mode من خلال الاستضافة
و بمراجعة الدعم الفني بشكل مباشر
لكن هذا تعديل اتمنى ان يكون حل على الاقل مشكلة المسارات الخارجية
PHP كود : <?php // ####################### SET PHP ENVIRONMENT ########################### error_reporting(E_ALL & ~E_NOTICE); @header('Content-type: text/html;charset=windows-1256');
define('NO_REGISTER_GLOBALS', 1); define('THIS_SCRIPT', 'watermark'); $MDIR = dirname(__FILE__); define("MDIR", $MDIR);
$phrasegroups = array(); $specialtemplates = array(); $globaltemplates = array(); $actiontemplates = array();
require_once('./global.php');
// ======================== // دالة مساعدة: تحميل الصورة بأمان عبر tmp // ======================== function loadImageSafe($imagePath) { // إذا كان رابط URL خارجي if (filter_var($imagePath, FILTER_VALIDATE_URL)) { $tmpFile = tempnam(sys_get_temp_dir(), 'wmark_'); // استخدام cURL بدل file_get_contents (أكثر توافقاً مع Safe Mode) if (function_exists('curl_init')) { $ch = curl_init($imagePath); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $data = curl_exec($ch); curl_close($ch); if ($data === false) return false; file_put_contents($tmpFile, $data); } elseif (ini_get('allow_url_fopen')) { $data = @file_get_contents($imagePath); if ($data === false) return false; file_put_contents($tmpFile, $data); } else { return false; } return $tmpFile; }
// إذا كان مسار محلي $localPath = realpath($imagePath); if ($localPath && file_exists($localPath)) { // نسخ إلى tmp لتجاوز قيود Safe Mode $tmpFile = tempnam(sys_get_temp_dir(), 'wmark_'); if (@copy($localPath, $tmpFile)) { return $tmpFile; } // إذا فشل copy نحاول قراءة مباشرة return $localPath; }
return false; }
// دالة إنشاء GD image من ملف مؤقت function createImageFromFile($filePath) { $info = @getimagesize($filePath); if (!$info) return false;
switch ($info['mime']) { case 'image/gif': return @imagecreatefromgif($filePath); case 'image/jpeg': return @imagecreatefromjpeg($filePath); case 'image/png': return @imagecreatefrompng($filePath); case 'image/bmp': return @imagecreatefrombmp($filePath); case 'image/webp': return @imagecreatefromwebp($filePath); default: return false; } }
// ======================== // بداية المنطق الرئيسي // ======================== $imageSrc = $_GET['src']; $minwidth = $vbulletin->options['watermarkwidthdef']; $fontsize = $vbulletin->options['watermarkfontsize']; $bandheight = $vbulletin->options['watermarkbandheight']; $fontname = $vbulletin->options['watermarkfontname']; $wmrkimage = $vbulletin->options['watermarkimage'];
// تحميل الصورة الأصلية عبر tmp $tmpMain = loadImageSafe($imageSrc); if (!$tmpMain) { header('HTTP/1.0 404 Not Found'); exit('Image not found'); }
$imagetype = @getimagesize($tmpMain); $im = createImageFromFile($tmpMain);
// تنظيف الملف المؤقت بعد الاستخدام if ($tmpMain !== $imageSrc && $tmpMain !== realpath($imageSrc)) { @unlink($tmpMain); }
if (!$im) { header('HTTP/1.0 500 Internal Server Error'); exit('Cannot process image'); }
// تحميل صورة الووترمارك إن وُجدت $stamp = null; if (!empty($wmrkimage)) { $tmpStamp = loadImageSafe($wmrkimage); if ($tmpStamp) { $stamp = createImageFromFile($tmpStamp); if ($tmpStamp !== $wmrkimage && $tmpStamp !== realpath($wmrkimage)) { @unlink($tmpStamp); } } }
// نص الووترمارك if (empty($vbulletin->options['watermarktext'])) { $watermarktext = $vbulletin->options['bbtitle']; } else { $watermarktext = $vbulletin->options['watermarktext']; }
$imagewidth = imagesx($im);
// إذا كانت الصورة أصغر من الحد الأدنى → أرسلها بدون ووترمارك if ($imagewidth <= $minwidth) { switch ($imagetype['mime']) { case 'image/gif': header('Content-type: image/gif'); readfile($imageSrc); break; default: header('Content-type: image/png'); imagepng($im); imagedestroy($im); break; } exit; }
// إنشاء شريط الووترمارك نصياً إن لم توجد صورة if (empty($stamp)) { $stamp = imagecreatetruecolor($imagewidth, $bandheight); $ypoint = $fontsize + round(($bandheight - $fontsize) / 2); $ffontname = MDIR . "/includes/fonts/" . $fontname; ImageTTFText($stamp, $fontsize, 0, 15, $ypoint, 0xFFFFFF, $ffontname, $watermarktext); }
// دمج الووترمارك على الصورة $marge_right = 0; $marge_bottom = 0; $sx = imagesx($stamp); $sy = imagesy($stamp);
imagecopymerge( $im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, $sx, $sy, 50 );
header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?>
إذا استمرت المشكلة
PHP كود : // أضف هذا مؤقتاً للتشخيص var_dump(sys_get_temp_dir()); var_dump(is_writable(sys_get_temp_dir())); var_dump(function_exists('curl_init'));
إذا كان السيرفر يستخدم PHP 7+ فالمشكلة على الأرجح open_basedir وليس Safe Mode
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - nnnjk - 04-04-26
يعطيك العافيه
الكود الاول لم يعمل والكود الثاني مافهمت مكانه
شغلت الهاك اختفت الصور علامة ×
نسخة php هو 5.6
انشئت مجلد جديد بااسم wmark_ في المجلد الرئيسي وفي مجلد المنتدى واعطيته التصريح 0777
لاكن لازالت المشكله قائمه
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - Amir_Alzubidy - 05-04-26
PHP كود : <?php error_reporting(E_ALL & ~E_NOTICE); header('Content-Type: image/png');
define("MDIR", dirname(__FILE__));
// ================== إعدادات ================== $watermark_text = "الشعافينمنحرب"; // نص الختم $font = MDIR . "/includes/fonts/arial.ttf"; // الخط $font_size = 18; $band_height = 35;
$save_dir = MDIR . "/wmark_/";
// ================== دالة تحميل الصورة ================== function downloadImage($url, $save_path) { // محاولة file_get_contents $data = @file_get_contents($url);
if ($data !== false) { file_put_contents($save_path, $data); return true; }
// إذا فشل نستخدم cURL if (function_exists('curl_init')) { $ch = curl_init($url); $fp = fopen($save_path, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_exec($ch); curl_close($ch); fclose($fp);
return file_exists($save_path); }
return false; }
// ================== جلب الصورة ================== if (!isset($_GET['src'])) { die('No image'); }
$src = trim($_GET['src']); $filename = md5($src) . ".img"; $local_image = $save_dir . $filename;
// تحميل الصورة إذا غير موجودة if (!file_exists($local_image)) { if (!downloadImage($src, $local_image)) { die('فشل تحميل الصورة'); } }
// ================== تحديد نوع الصورة ================== $info = getimagesize($local_image); if (!$info) { die('Invalid image'); }
switch ($info['mime']) { case 'image/jpeg': $im = imagecreatefromjpeg($local_image); break; case 'image/png': $im = imagecreatefrompng($local_image); break; case 'image/gif': $im = imagecreatefromgif($local_image); break; case 'image/webp': $im = imagecreatefromwebp($local_image); break; case 'image/bmp': $im = imagecreatefrombmp($local_image); break; default: die('نوع صورة غير مدعوم'); }
// ================== إنشاء طبقة الختم ================== $width = imagesx($im); $stamp = imagecreatetruecolor($width, $band_height);
// خلفية سوداء شفافة $black = imagecolorallocatealpha($stamp, 0, 0, 0, 60); imagefilledrectangle($stamp, 0, 0, $width, $band_height, $black);
// لون النص $white = imagecolorallocate($stamp, 255, 255, 255);
// كتابة النص $y = $font_size + 5; imagettftext($stamp, $font_size, 0, 10, $y, $white, $font, $watermark_text);
// ================== دمج الختم ================== $stamp_w = imagesx($stamp); $stamp_h = imagesy($stamp);
imagecopymerge( $im, $stamp, imagesx($im) - $stamp_w, imagesy($im) - $stamp_h, 0, 0, $stamp_w, $stamp_h, 60 );
// ================== إخراج الصورة ================== imagepng($im);
// تنظيف imagedestroy($im); imagedestroy($stamp); ?>
طريقة الاستخدام :
PHP كود : watermark.php?src=https://example.com/image.jpg
ملاحظة : تأكد من وجود الخط: /includes/fonts/arial.ttf
إذا لم يكن موجود، سيفشل الكتابة على الصورة.
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - nnnjk - 05-04-26
يعطيك العافيه
اشتغل الكود فقط في الروابط في المواضيع والمشاركات
لاكن لم يختم صور المرفقات كما كان سابقا
لان المرفقات ضروري اختمها
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - Amir_Alzubidy - 05-04-26
(05-04-26, 03:02 PM)nnnjk كتب : يعطيك العافيه
اشتغل الكود فقط في الروابط في المواضيع والمشاركات
لاكن لم يختم صور المرفقات كما كان سابقا
لان المرفقات ضروري اختمها
PHP كود : <?php error_reporting(E_ALL & ~E_NOTICE); header('Content-Type: image/png'); define("MDIR", dirname(__FILE__)); // ================== إعدادات ================== $watermark_text = "الشعافينمنحرب"; // نص الختم $font_size = 5; // خطوط PHP الافتراضية 1-5 $band_height = 25; $save_dir = MDIR . "/wmark_/"; // ================== دالة تحميل الصورة ================== function downloadImage($url, $save_path) { // محاولة file_get_contents $data = @file_get_contents($url); if ($data !== false) { file_put_contents($save_path, $data); return true; } // fallback إلى cURL if (function_exists('curl_init')) { $ch = curl_init($url); $fp = fopen($save_path, 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_exec($ch); curl_close($ch); fclose($fp); return file_exists($save_path); } return false; } // ================== جلب الصورة ================== if (!isset($_GET['src'])) { die('No image'); } $src = trim($_GET['src']); $filename = md5($src) . ".img"; $local_image = $save_dir . $filename; if (filter_var($src, FILTER_VALIDATE_URL)) { // إذا كان رابط خارجي if (!file_exists($local_image)) { if (!downloadImage($src, $local_image)) { die('فشل تحميل الصورة'); } } } else { // إذا كان مسار محلي (مرفق) $local_image = MDIR . '/' . ltrim($src, '/'); if (!file_exists($local_image)) { die('الصورة غير موجودة'); } } // ================== تحديد نوع الصورة ================== $info = getimagesize($local_image); if (!$info) { die('Invalid image'); } switch ($info['mime']) { case 'image/jpeg': $im = imagecreatefromjpeg($local_image); break; case 'image/png': $im = imagecreatefrompng($local_image); break; case 'image/gif': $im = imagecreatefromgif($local_image); break; case 'image/webp': $im = imagecreatefromwebp($local_image); break; case 'image/bmp': $im = imagecreatefrombmp($local_image); break; default: die('نوع صورة غير مدعوم'); } // ================== إنشاء طبقة الختم ================== $width = imagesx($im); $stamp = imagecreatetruecolor($width, $band_height); // خلفية سوداء $black = imagecolorallocate($stamp, 0, 0, 0); imagefilledrectangle($stamp, 0, 0, $width, $band_height, $black); // لون النص $white = imagecolorallocate($stamp, 255, 255, 255); // كتابة النص (بدون خطوط خارجية) imagestring($stamp, $font_size, 10, 5, $watermark_text, $white); // ================== دمج الختم ================== $stamp_w = imagesx($stamp); $stamp_h = imagesy($stamp); imagecopymerge( $im, $stamp, imagesx($im) - $stamp_w, imagesy($im) - $stamp_h, 0, 0, $stamp_w, $stamp_h, 60 ); // ================== إخراج الصورة ================== imagepng($im); // تنظيف imagedestroy($im); imagedestroy($stamp); ?>
طريقة الاستخدام
للرابط الخارجي :
PHP كود : watermark.php?src=https://example.com/image.jpg
للمرفق المحلي :
PHP كود : watermark.php?src=uploads/abc.jpg
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - nnnjk - 05-04-26
يعطيك العافيه
حبذا لو كان ختم المرفقات بدون الدخول الى رابط الملف الخاص بالهاك
كما في الكود الذي ارفقت في مشاركتي الاولى
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - nnnjk - 05-04-26
الاخ Amir_Alzubidy السلام عليكم
ارجوا الرد
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - Amir_Alzubidy - 05-04-26
(05-04-26, 04:11 PM)nnnjk كتب : يعطيك العافيه
حبذا لو كان ختم المرفقات بدون الدخول الى رابط الملف الخاص بالهاك
كما في الكود الذي ارفقت في مشاركتي الاولى
قم بتعديل هذا الجزء فقط :
PHP كود : $src = trim($_GET['src']); $filename = md5($src) . ".img"; $local_image = $save_dir . $filename;
if (filter_var($src, FILTER_VALIDATE_URL)) { // إذا كان رابط خارجي if (!file_exists($local_image)) { if (!downloadImage($src, $local_image)) { die('فشل تحميل الصورة'); } } } else { // إذا كان مسار مرفق محلي على السيرفر // ? التعديل: نقراه مباشرة بدون المرور برابط الهاك $local_image = MDIR . '/' . ltrim($src, '/'); if (!file_exists($local_image)) { die('الصورة غير موجودة'); } }
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - nnnjk - 05-04-26
تسلم
بعد التعديل الاخير
ظهر خطا عند فتح المرفق
Parse error: syntax error, unexpected 'مرفقة' (T_STRING), expecting ']' in /home/xxx/domains/alshafeen.site/public_html/vb/watermark.php on line 52
|