تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] تغيير الكود ليتوافق مع تفعيل خاصية safe mode
#2
عليكم السلام 
بالمناسبة حل مشكلة 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($imagePathFILTER_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($chCURLOPT_RETURNTRANSFERtrue);
            curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
            curl_setopt($chCURLOPT_TIMEOUT15);
            curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
            $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$fontsize015$ypoint0xFFFFFF$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,
    00,
    $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]
الرد }}}
تم الشكر بواسطة: nnnjk


الردود في هذا الموضوع
RE: تغيير الكود ليتوافق مع تفعيل خاصية safe mode - بواسطة Amir_Alzubidy - 04-04-26, 07:24 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  طلب اضافة ختم الصور لهذا الكود nnnjk 48 1,030 05-04-26, 03:40 PM
آخر رد: Amir_Alzubidy
  [كود] طلب تعديل الكود mostfa1995 0 1,839 23-04-16, 04:05 AM
آخر رد: mostfa1995
Question كيف استخدم هذا الكود ...؟ Ahmed-IT 1 2,260 05-08-15, 08:31 PM
آخر رد: oneyemenweb2
  هل هذا الكود جيد لتعديل نص في ملف نصي ali.alfoly 16 8,006 02-05-14, 05:37 PM
آخر رد: vbnet
Star [سؤال] اخواني الرجاء التعديل علي هذا الكود SniperHacker 3 2,908 27-02-14, 12:38 AM
آخر رد: oneyemenweb2

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم