منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] كيف افعل دالة shell_exec - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (https://vb4arb.com/vb)
+-- قسم : قسم برمجة وتطوير المواقع (https://vb4arb.com/vb/forumdisplay.php?fid=51)
+--- قسم : قسم PHP (https://vb4arb.com/vb/forumdisplay.php?fid=58)
+---- قسم : قسم اسئلة PHP (https://vb4arb.com/vb/forumdisplay.php?fid=59)
+---- الموضوع : [سؤال] كيف افعل دالة shell_exec (/showthread.php?tid=56212)



كيف افعل دالة shell_exec - nnnjk - 03-04-26

السلام عليكم ركبت سكربت سحب الملف من رابط ولم يعمل وتأتي رسالة تم تعطيل shell_exec Warning: shell_exec() has been disabled for security reasons in كيف افعلها من الملف او من خلال ملف htaccess


RE: كيف افعل دالة shell_exec - Amir_Alzubidy - 04-04-26

(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


RE: كيف افعل دالة shell_exec - nnnjk - 04-04-26

يعطيك العافيه
هذا الكود
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;?>



RE: كيف افعل دالة shell_exec - Amir_Alzubidy - 04-04-26

[*]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> 



RE: كيف افعل دالة shell_exec - nnnjk - 04-04-26

يعطيك العافيه
تم رفع الملف ويكتب رابط الملف مع المجلد
لاكن عند الدخول اليه صفحة 404 لم يوجد الملف


RE: كيف افعل دالة shell_exec - Amir_Alzubidy - 04-04-26

(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 وأن الرابط يشير لنفس المسار داخل الموقع.


RE: كيف افعل دالة shell_exec - nnnjk - 04-04-26

احسنت انحلت المشكلة ورفع الملف وتم عرض الرابط
بالنسبه للخطأ السابق انه ينشي مجلد جديد اذا المجلد المكتوب ليس موجودا


RE: كيف افعل دالة shell_exec - nnnjk - 20-04-26

اخوي طلب بسيط من فظلك
اريد سحب ملفين في آن واحد
ممكن تعدل الكود الاخير


RE: كيف افعل دالة shell_exec - Amir_Alzubidy - 21-04-26

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

بالتوفيق


RE: كيف افعل دالة shell_exec - nnnjk - 21-04-26

مشكور
يعطيك العافيه ماقصرت