تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيف افعل دالة shell_exec
#1
السلام عليكم ركبت سكربت سحب الملف من رابط ولم يعمل وتأتي رسالة تم تعطيل shell_exec Warning: shell_exec() has been disabled for security reasons in كيف افعلها من الملف او من خلال ملف htaccess
الرد }}}
تم الشكر بواسطة:
#2
(03-04-26, 11:07 PM)nnnjk كتب : السلام عليكم ركبت سكربت سحب الملف من رابط ولم يعمل وتأتي رسالة تم تعطيل shell_exec Warning: shell_exec() has been disabled for security reasons in كيف افعلها من الملف او من خلال ملف htaccess

عليكم السلام 
[*]لا يمكن تفعيلها من .htaccess
[*]تحتاج صلاحية على php.ini
[*]الأفضل تستبدلها بـ cURL أو file_get_contents

[*]حتى لو قدرت تفعلshell_exec
استخدامها ممكن يقفل حسابك في الاستضافة

[*]مثال باستخدام cURL (أفضل وأسرع) : 
PHP كود :
$url "https://example.com/file.jpg";
$ch curl_init($url);
$fp fopen("file.jpg""w");
curl_setopt($chCURLOPT_FILE$fp);
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
curl_exec($ch);
curl_close($ch);
fclose($fp); 

او اذا تمكنت في ردك القادم تنسخ الكود نحاول نضبط الامور 
لكن انصح  باستخدام cURL
[صورة مرفقة: 177461173141861.gif]
الرد }}}
تم الشكر بواسطة: nnnjk , nnnjk , nnnjk
#3
يعطيك العافيه
هذا الكود
PHP كود :
<title>الاتصال</title>
<?
php require('login.php');?>
<?php 
if($_SESSION['username']): ?>
<html>
<head>
<style>
input[type=text], select {
    width: 100%;
    padding: 12px 20px;
    margin: 8px 0;
    display: inline-block;
    border: 1px solid #ccc;
    border-radius: 4px;
    box-sizing: border-box;
    text-align: center;
}

input[type=submit] {
    width: 100%;
    background-color: #4CAF50;
    color: white;
    padding: 14px 20px;
    margin: 8px 0;
    border: none;
    border-radius: 4px;
    cursor: pointer;
}

input[type=submit]:hover {
    background-color: #45a049;
}

div {
    border-radius: 5px;
    padding: 20px;
}
body {
    background-image: url("http://akveo.com/blur-admin/assets/img/blur-bg-blurred.jpg");
}
</style>
</head>
<body>
<div>
<center>
<a href="logout.php"><img src="http://findicons.com/files/icons/2146/realistik_reloaded/128/exit.png" height="42" width="42"></a>
<center>
<hr><br>
<h2 style="padding: 1px;background: rgba(255, 152, 0, 0.84);width: 15%;">تحميل ملف جديد</h2>
<form action="index.php?do=download" method="post">
<input dir="rtl" required type="text" name="link" placeholder="الرابط المباشر للتحميل"><br>
<input dir="rtl" required type="text" name="dir" placeholder="المسار االذي تريد وضع الملف فيه"><br>
<input style="background-color: #00BCD4;" type="submit" value="! ابدا الان">
</form>
<?php

$link 
$_POST['link'];
$dir $_POST['dir'];
$do $_GET['do'];

if (
$do =="download")
{
chdir($dir);
$download shell_exec("wget $link");
echo 
$download;
echo 
"<input type='submit' style='width: 50%;' value='تم التحميل بنجاح الى المجلد المختار'>";
echo 
"<meta http-equiv='refresh' content='2; url=index.php' />";
}
else{}

?>

<?php endif;?>
الرد }}}
تم الشكر بواسطة:
#4
[*]shell_exec مستحيل تفعّلها على الاستضافة المشتركة
[*]الحل الأفضل cURL
[*]الكود اللي عطيتك إياه يغنيك عن wget بالكامل
PHP كود :
<?php
session_start
();
require(
'login.php');

if (!isset(
$_SESSION['username'])) {
    die("يجب تسجيل الدخول");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>تحميل ملف</title>
<style>
input[type=text], select {
    width: 100%;
    padding: 12px;
    margin: 8px 0;
    border: 1px solid #ccc;
    border-radius: 4px;
    text-align: center;
}
input[type=submit] {
    width: 100%;
    background-color: #4CAF50;
    color: white;
    padding: 14px;
    border: none;
    border-radius: 4px;
}
body {
    background-image: url("http://akveo.com/blur-admin/assets/img/blur-bg-blurred.jpg");
}
</style>
</head>
<body>

<div style="width:50%;margin:auto;">
<center>
<a href="logout.php">تسجيل خروج</a>
<hr>

<h2>تحميل ملف جديد</h2>

<form method="post">
<input required type="text" name="link" placeholder="الرابط المباشر"><br>
<input required type="text" name="dir" placeholder="المجلد (مثال: uploads/)"><br>
<input type="submit" name="download" value="ابدأ التحميل">
</form>

<hr>

<?php

if (isset($_POST['download'])) {

    $link trim($_POST['link']);
    $dir  trim($_POST['dir']);

    // ✅ التحقق من الرابط
    if (!filter_var($linkFILTER_VALIDATE_URL)) {
        die("❌ رابط غير صالح");
    }

    // ✅ حماية المسار (منع الخروج خارج الموقع)
    if (strpos($dir"..") !== false) {
        die("❌ مسار غير مسموح");
    }

    // ✅ إنشاء المجلد إذا غير موجود
    if (!is_dir($dir)) {
        mkdir($dir0755true);
    }

    // ✅ بدء cURL
    $ch curl_init($link);

    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HEADER => true,
        CURLOPT_NOBODY => false,
        CURLOPT_TIMEOUT => 300,
    ]);

    $response curl_exec($ch);

    if (curl_errno($ch)) {
        die("❌ خطأ: " curl_error($ch));
    }

    $header_size curl_getinfo($chCURLINFO_HEADER_SIZE);
    $headers substr($response0$header_size);
    $body    substr($response$header_size);

    // ✅ محاولة استخراج اسم الملف من الهيدر
    $filename "";

    if (preg_match('/Content-Disposition:.*filename=["\']?([^"\']+)/i'$headers$matches)) {
        $filename $matches[1];
    }

    // إذا لم يتم العثور عليه
    if (!$filename) {
        $filename basename(parse_url($linkPHP_URL_PATH));
    }

    // إذا فاضي
    if (!$filename || strlen($filename) < 3) {
        $filename "file_" time();
    }

    $filepath rtrim($dir"/") . "/" $filename;

    // ✅ حفظ الملف
    if (file_put_contents($filepath$body)) {
        echo "✅ تم التحميل بنجاح<br>";
        echo "? المسار: " $filepath;
    } else {
        echo "❌ فشل حفظ الملف";
    }

    curl_close($ch);
}

?>

</center>
</div>

</body>
</html> 
[صورة مرفقة: 177461173141861.gif]
الرد }}}
تم الشكر بواسطة: nnnjk , nnnjk , nnnjk
#5
يعطيك العافيه
تم رفع الملف ويكتب رابط الملف مع المجلد
لاكن عند الدخول اليه صفحة 404 لم يوجد الملف
الرد }}}
تم الشكر بواسطة:
#6
(04-04-26, 04:12 AM)nnnjk كتب : يعطيك العافيه
تم رفع الملف ويكتب رابط الملف مع المجلد
لاكن عند الدخول اليه صفحة 404 لم يوجد الملف

الله يعافيك 
المشكلة عندك الآن ليست من التحميل
التحميل تم على الاغلب
لكن المسار اللي ينحفظ فيه الملف على الارجح ليس داخل public_html لذلك يطلع لك 404.

الحل الاسلم والاصح مكان او مسار الحفظ يجب ان يكون في مجلد الـ  public_html 

PHP كود :
<?php
session_start
();
require(
'login.php');

if (!isset(
$_SESSION['username'])) {
    die("يجب تسجيل الدخول");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>تحميل ملف</title>
<style>
input[type=text] {
    width: 100%;
    padding: 12px;
    margin: 8px 0;
    border: 1px solid #ccc;
    border-radius: 4px;
    text-align: center;
}
input[type=submit] {
    width: 100%;
    background-color: #4CAF50;
    color: white;
    padding: 14px;
    border: none;
    border-radius: 4px;
}
body {
    background-image: url("http://akveo.com/blur-admin/assets/img/blur-bg-blurred.jpg");
}
</style>
</head>
<body>

<div style="width:50%;margin:auto;">
<center>

<a href="logout.php">تسجيل خروج</a>
<hr>

<h2>تحميل ملف جديد</h2>

<form method="post">
<input required type="text" name="link" placeholder="الرابط المباشر"><br>
<input required type="text" name="dir" placeholder="اسم المجلد (مثال: uploads)"><br>
<input type="submit" name="download" value="ابدأ التحميل">
</form>

<hr>

<?php

if (isset($_POST['download'])) {

    $link trim($_POST['link']);
    $dir  trim($_POST['dir']);

    // ✅ التحقق من الرابط
    if (!filter_var($linkFILTER_VALIDATE_URL)) {
        die("❌ رابط غير صالح");
    }

    // ✅ منع الاختراق
    if (strpos($dir"..") !== false) {
        die("❌ مسار غير مسموح");
    }

    // ✅ المسار الحقيقي داخل public_html
    $basePath __DIR__// مكان السكربت (داخل public_html)
    $fullDir  $basePath "/" $dir;

    // ✅ إنشاء المجلد إذا غير موجود
    if (!is_dir($fullDir)) {
        mkdir($fullDir0755true);
    }

    // ✅ بدء التحميل
    $ch curl_init($link);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HEADER => true,
        CURLOPT_TIMEOUT => 300,
    ]);

    $response curl_exec($ch);

    if (curl_errno($ch)) {
        die("❌ خطأ: " curl_error($ch));
    }

    $header_size curl_getinfo($chCURLINFO_HEADER_SIZE);
    $headers substr($response0$header_size);
    $body    substr($response$header_size);

    // ✅ استخراج اسم الملف
    $filename "";

    if (preg_match('/Content-Disposition:.*filename=["\']?([^"\']+)/i'$headers$matches)) {
        $filename $matches[1];
    }

    if (!$filename) {
        $filename basename(parse_url($linkPHP_URL_PATH));
    }

    if (!$filename || strlen($filename) < 3) {
        $filename "file_" time();
    }

    // تنظيف الاسم
    $filename preg_replace('/[^a-zA-Z0-9\.\-_]/''_'$filename);

    $filepath $fullDir "/" $filename;

    // ✅ حفظ الملف
    if (file_put_contents($filepath$body)) {

        // رابط الوصول
        $fileUrl $dir "/" $filename;

        echo "✅ تم التحميل بنجاح<br><br>";
        echo "? تم الحفظ في: " $filepath "<br><br>";
        echo "<a href='$fileUrl' target='_blank'>? فتح الملف</a>";

    } else {
        echo "❌ فشل حفظ الملف";
    }

    curl_close($ch);
}

?>

</center>
</div>

</body>
</html> 


اذا ما مشي الحال تأكد أن الملف داخل مجلد public_html
وأن المجلد (مثل uploads) موجود داخله و بصلاحيات 755 أو 775 وأن الرابط يشير لنفس المسار داخل الموقع.
[صورة مرفقة: 177461173141861.gif]
الرد }}}
تم الشكر بواسطة: nnnjk
#7
احسنت انحلت المشكلة ورفع الملف وتم عرض الرابط
بالنسبه للخطأ السابق انه ينشي مجلد جديد اذا المجلد المكتوب ليس موجودا
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy
#8
اخوي طلب بسيط من فظلك
اريد سحب ملفين في آن واحد
ممكن تعدل الكود الاخير
الرد }}}
تم الشكر بواسطة:
#9
PHP كود :
<?php
session_start
();
require(
'login.php');

if (!isset(
$_SESSION['username'])) {
    die("يجب تسجيل الدخول");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>تحميل ملف</title>
<style>
input[type=text] {
    width: 100%;
    padding: 12px;
    margin: 8px 0;
    border: 1px solid #ccc;
    border-radius: 4px;
    text-align: center;
}
input[type=submit] {
    width: 100%;
    background-color: #4CAF50;
    color: white;
    padding: 14px;
    border: none;
    border-radius: 4px;
}
body {
    background-image: url("http://akveo.com/blur-admin/assets/img/blur-bg-blurred.jpg");
}
</style>
</head>
<body>

<div style="width:50%;margin:auto;">
<center>

<a href="logout.php">تسجيل خروج</a>
<hr>

<h2>تحميل ملفين جديدين</h2>

<form method="post">
<b>الملف الأول:</b><br>
<input required type="text" name="link1" placeholder="الرابط المباشر الأول"><br>

<b>الملف الثاني:</b><br>
<input required type="text" name="link2" placeholder="الرابط المباشر الثاني"><br>

<input required type="text" name="dir" placeholder="اسم المجلد (مثال: uploads)"><br>
<input type="submit" name="download" value="ابدأ التحميل">
</form>

<hr>

<?php

function downloadFile($link$fullDir) {
    if (!filter_var($linkFILTER_VALIDATE_URL)) {
        return ["success" => false"msg" => "❌ رابط غير صالح: $link"];
    }

    $ch curl_init($link);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HEADER         => true,
        CURLOPT_TIMEOUT        => 300,
    ]);

    $response curl_exec($ch);

    if (curl_errno($ch)) {
        $err curl_error($ch);
        curl_close($ch);
        return ["success" => false"msg" => "❌ خطأ cURL: $err"];
    }

    $header_size curl_getinfo($chCURLINFO_HEADER_SIZE);
    $headers     substr($response0$header_size);
    $body        substr($response$header_size);
    curl_close($ch);

    // استخراج اسم الملف
    $filename "";
    if (preg_match('/Content-Disposition:.*filename=["\']?([^"\';\r\n]+)/i'$headers$matches)) {
        $filename trim($matches[1]);
    }
    if (!$filename) {
        $filename basename(parse_url($linkPHP_URL_PATH));
    }
    if (!$filename || strlen($filename) < 3) {
        $filename "file_" time() . rand(100999);
    }

    $filename preg_replace('/[^a-zA-Z0-9\.\-_]/''_'$filename);
    $filepath $fullDir "/" $filename;

    if (file_put_contents($filepath$body)) {
        return ["success" => true"filepath" => $filepath"filename" => $filename];
    } else {
        return ["success" => false"msg" => "❌ فشل حفظ الملف: $filename"];
    }
}

if (isset(
$_POST['download'])) {

    $link1 trim($_POST['link1']);
    $link2  trim($_POST['link2']);
    $dir   trim($_POST['dir']);

    if (strpos($dir"..") !== false) {
        die("❌ مسار غير مسموح");
    }

    $basePath __DIR__;
    $fullDir  $basePath "/" $dir;

    if (!is_dir($fullDir)) {
        mkdir($fullDir0755true);
    }

    $links = [$link1$link2];

    foreach ($links as $i => $link) {
        $num $i 1;
        echo "<b>الملف $num:</b><br>";

        $result downloadFile($link$fullDir);

        if ($result['success']) {
            $fileUrl $dir "/" $result['filename'];
            echo "✅ تم التحميل بنجاح<br>";
            echo "? تم الحفظ في: " $result['filepath'] . "<br>";
            echo "<a href='$fileUrl' target='_blank'>? فتح الملف</a>";
        } else {
            echo $result['msg'];
        }

        echo "<br><br>";
    }
}

?>

</center>
</div>

</body>
</html> 

استخرجت منطق التحميل في دالة مستقلة downloadFile() حتى لا يتكرر الكود
تم اضافة حقلين للرابط (link1 و link2) بدل حقل واحد
[*]الحلقة foreach تمشي على الرابطين وتقوم بتحميل كل رابط وتعرض نتيجته على حده
[*]كل ملف يظهر نتيجته سواء نجح أو فشل
لو تبغى تزيد أكثر من ملفين لاحقاً... 
ما عليك إلا تضيف link3 وتضيفه للمصفوفة $links

بالتوفيق
[صورة مرفقة: 177461173141861.gif]
الرد }}}
تم الشكر بواسطة: nnnjk
#10
مشكور
يعطيك العافيه ماقصرت
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] ماهي دالة مسوؤلة عن استخراج ملفات iso في php اوjavascript alizid 1 608 28-03-23, 10:14 AM
آخر رد: sanyor77
  [كود] بشرى . لقد عرفت فك ترميز النصوص العربية (توجد دالة جاهزة) سعود 7 5,433 26-10-14, 12:18 PM
آخر رد: سعود

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


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