المشاركات : 91
المواضيع 17
الإنتساب : Aug 2021
السمعة :
2
الشكر: 118
تم شكره 48 مرات في 46 مشاركات
السلام عليكم ركبت سكربت سحب الملف من رابط ولم يعمل وتأتي رسالة تم تعطيل shell_exec Warning: shell_exec() has been disabled for security reasons in كيف افعلها من الملف او من خلال ملف htaccess
المشاركات : 78
المواضيع 0
الإنتساب : Nov 2014
السمعة :
2
الشكر: 17169
تم شكره 13211 مرات في 905 مشاركات
(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($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_exec($ch); curl_close($ch); fclose($fp);
او اذا تمكنت في ردك القادم تنسخ الكود نحاول نضبط الامور
لكن انصح باستخدام cURL
المشاركات : 91
المواضيع 17
الإنتساب : Aug 2021
السمعة :
2
الشكر: 118
تم شكره 48 مرات في 46 مشاركات
يعطيك العافيه
هذا الكود
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;?>
المشاركات : 78
المواضيع 0
الإنتساب : Nov 2014
السمعة :
2
الشكر: 17169
تم شكره 13211 مرات في 905 مشاركات
[*]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($link, FILTER_VALIDATE_URL)) { die("❌ رابط غير صالح"); }
// ✅ حماية المسار (منع الخروج خارج الموقع) if (strpos($dir, "..") !== false) { die("❌ مسار غير مسموح"); }
// ✅ إنشاء المجلد إذا غير موجود if (!is_dir($dir)) { mkdir($dir, 0755, true); }
// ✅ بدء 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($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $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($link, PHP_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>
المشاركات : 91
المواضيع 17
الإنتساب : Aug 2021
السمعة :
2
الشكر: 118
تم شكره 48 مرات في 46 مشاركات
04-04-26, 04:12 AM
(آخر تعديل لهذه المشاركة : 04-04-26, 04:33 AM {2} بواسطة nnnjk.)
يعطيك العافيه
تم رفع الملف ويكتب رابط الملف مع المجلد
لاكن عند الدخول اليه صفحة 404 لم يوجد الملف
المشاركات : 78
المواضيع 0
الإنتساب : Nov 2014
السمعة :
2
الشكر: 17169
تم شكره 13211 مرات في 905 مشاركات
(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($link, FILTER_VALIDATE_URL)) { die("❌ رابط غير صالح"); }
// ✅ منع الاختراق if (strpos($dir, "..") !== false) { die("❌ مسار غير مسموح"); }
// ✅ المسار الحقيقي داخل public_html $basePath = __DIR__; // مكان السكربت (داخل public_html) $fullDir = $basePath . "/" . $dir;
// ✅ إنشاء المجلد إذا غير موجود if (!is_dir($fullDir)) { mkdir($fullDir, 0755, true); }
// ✅ بدء التحميل $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($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $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($link, PHP_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 وأن الرابط يشير لنفس المسار داخل الموقع.
المشاركات : 91
المواضيع 17
الإنتساب : Aug 2021
السمعة :
2
الشكر: 118
تم شكره 48 مرات في 46 مشاركات
احسنت انحلت المشكلة ورفع الملف وتم عرض الرابط
بالنسبه للخطأ السابق انه ينشي مجلد جديد اذا المجلد المكتوب ليس موجودا
المشاركات : 91
المواضيع 17
الإنتساب : Aug 2021
السمعة :
2
الشكر: 118
تم شكره 48 مرات في 46 مشاركات
20-04-26, 10:38 PM
(آخر تعديل لهذه المشاركة : 20-04-26, 10:48 PM {2} بواسطة nnnjk.)
اخوي طلب بسيط من فظلك
اريد سحب ملفين في آن واحد
ممكن تعدل الكود الاخير
المشاركات : 78
المواضيع 0
الإنتساب : Nov 2014
السمعة :
2
الشكر: 17169
تم شكره 13211 مرات في 905 مشاركات
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($link, FILTER_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($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $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($link, PHP_URL_PATH)); } if (!$filename || strlen($filename) < 3) { $filename = "file_" . time() . rand(100, 999); }
$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($fullDir, 0755, true); }
$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
بالتوفيق
المشاركات : 91
المواضيع 17
الإنتساب : Aug 2021
السمعة :
2
الشكر: 118
تم شكره 48 مرات في 46 مشاركات
مشكور
يعطيك العافيه ماقصرت
|