04-04-26, 07:24 PM
(آخر تعديل لهذه المشاركة : 04-04-26, 07:33 PM {2} بواسطة Amir_Alzubidy.)
عليكم السلام
بالمناسبة حل مشكلة safe mode من خلال الاستضافة
و بمراجعة الدعم الفني بشكل مباشر
لكن هذا تعديل اتمنى ان يكون حل على الاقل مشكلة المسارات الخارجية
إذا استمرت المشكلة
إذا كان السيرفر يستخدم PHP 7+ فالمشكلة على الأرجح open_basedir وليس Safe Mode
بالمناسبة حل مشكلة 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


![[صورة مرفقة: 177461173141861.gif]](https://up6.cc/2026/03/177461173141861.gif)