نشر التطبيق خطوة بخطوة
من localhost إلى رابط يفتحه أي شخص. ⏱ نحو 35 دقيقة.
- تراجع أمان التطبيق قبل نشره وتمنع تسرّب المعلومات الحساسة.
- تفصل إعدادات التطوير عن الإنتاج وتحفظ الأسرار خارج الكود.
- تنشر تطبيق
PHPوMySQLعلى استضافة مشتركة خطوة بخطوة. - تضبط صلاحيات الملفات والمجلدات، وتميّز طرق النشر.
١قبل الرفع: مراجعة أمان
النشر يعني أن أي شخص في العالم يستطيع الوصول لتطبيقك. فقبل الرفع راجع هذه القائمة (وهي أول موضوع في وحدة النشر في الخطة: «مراجعة تدابير أمان التطبيق لضمان عدم تعرض المعلومات الحساسة»):
| البند | تحقق من |
|---|---|
| الأخطاء | display_errors معطّل في الإنتاج (الدرس 24). |
| الأسرار | كلمات مرور القاعدة ومفاتيح الخدمات ليست في الكود المرفوع ولا في Git. |
| ملفات التطوير | احذف phpinfo.php، وملفات الاختبار، والنسخ الاحتياطية (.bak و .sql)، ومجلد .git من المجلد العام. |
| قاعدة البيانات | مستخدم خاص بالتطبيق بكلمة مرور قوية، لا root. |
| المدخلات | كل استعلام مُعدّ، وكل إخراج عبر htmlspecialchars. |
| الصفحات المحمية | الإدارة تتطلب دخولًا وصلاحية، والحذف بـ POST. |
| الجلسات | cookie_secure و httponly و samesite، و session_regenerate_id بعد الدخول. |
٢ملف واحد يعرف أين يعمل
حتى لا تعدّل الكود يدويًّا عند كل نشر، اجعل ملف بدء واحدًا يكتشف البيئة ويضبط الإعدادات. هنا يكتشفها من اسم المضيف: الطلب الأول من جهازك، والثاني على الخادم المنشور:
<?phprequire __DIR__ . '/bootstrap.php';echo "البيئة: " . APP_ENV . "\n";echo "عرض الأخطاء: " . (ini_get('display_errors') ? 'نعم' : 'لا') . "\n";echo "إعدادات القاعدة: " . ($db ? 'موجودة' : 'secrets.php غير موجود على الخادم بعد!');
<?php// bootstrap.php: أول ملف يُضمَّن في كل صفحة$host = $_SERVER['HTTP_HOST'] ?? 'localhost';$isLocal = in_array($host, ['localhost', '127.0.0.1'], true); define('APP_ENV', $isLocal ? 'development' : 'production');ini_set('display_errors', APP_ENV === 'development' ? '1' : '0');ini_set('log_errors', '1');date_default_timezone_set('Asia/Riyadh'); // إعدادات القاعدة: محليًّا من هنا، وعلى الخادم من ملف لا يُرفع إلى Git$db = APP_ENV === 'development' ? ['dsn' => 'mysql:host=localhost;dbname=app;charset=utf8mb4', 'user' => 'root', 'pass' => ''] : (file_exists(__DIR__ . '/../secrets.php') ? require __DIR__ . '/../secrets.php' : null);
على الخادم يجب أن تنشئ secrets.php بيدك خارج المجلد العام، بالقيم التي تعطيك إياها لوحة الاستضافة. هذا الملف لا يُرفع مع الكود أبدًا.
٣خطوات النشر على استضافة مشتركة
الخطوات متشابهة في أغلب الاستضافات المشتركة (InfinityFree وغيرها)، وقد تختلف أسماء القوائم:
- أنشئ الحساب والموقع: اختر نطاقًا فرعيًّا مجانيًّا مثل
myapp.example-host.com(أو اربط نطاقك؛ الدرس القادم). - أنشئ قاعدة البيانات من لوحة التحكم، واكتب: اسم القاعدة، واسم المستخدم، وكلمة المرور، واسم خادم القاعدة (في الاستضافات المشتركة غالبًا ليس localhost؛ انسخه كما تعرضه اللوحة).
- استورد الجداول: صدّر قاعدتك من phpMyAdmin على XAMPP (تبويب Export ← SQL)، ثم استوردها في phpMyAdmin الاستضافة
(Import). - ارفع الملفات إلى المجلد العام (غالبًا اسمه
htdocsأوpublic_html): عبر مدير الملفات في المتصفح، أو برنامج FTP مثل FileZilla ببيانات FTP من اللوحة. - أنشئ ملف الأسرار secrets.php على الخادم بقيم القاعدة الجديدة.
- اضبط الصلاحيات (الخطوة التالية)، ثم افتح الموقع واختبره (الدرس 27).
<?php// secrets.php (على الخادم فقط، خارج htdocs إن أمكن)return [ 'dsn' => 'mysql:host=sql123.example-host.com;dbname=if0_37_app;charset=utf8mb4', 'user' => 'if0_37', 'pass' => 'كلمة-المرور-من-لوحة-التحكم',];
٤الصلاحيات والاعتماديات
على خوادم Linux لكل ملف ومجلد صلاحيات: من يقرأ، ومن يكتب، ومن ينفّذ. تُكتب بثلاثة أرقام: للمالك، ثم للمجموعة، ثم للآخرين (4 قراءة + 2 كتابة + 1 تنفيذ):
| الصلاحية | تعني | لـ |
|---|---|---|
644 | المالك يقرأ ويكتب، والبقية يقرؤون فقط | ملفات PHP و HTML و CSS |
755 | المالك كل شيء، والبقية يقرؤون ويدخلون المجلد | المجلدات |
775 أو حسب الاستضافة | الخادم يكتب داخله | مجلد uploads أو cache أو data |
777 | الكل يكتب | ✗ لا تستخدمها أبدًا |
وتُضبط من مدير الملفات (Permissions / CHMOD) أو من برنامج FTP. والاعتماديات Dependencies هي ما يحتاجه تطبيقك ليعمل: إصدار PHP، والإضافات، والمكتبات الخارجية (إن استخدمت Composer فارفع مجلد vendor أو ثبّته على الخادم). وصفحة الجاهزية من الدرس السابق تكشف أي نقص.
٥طرق النشر
| الطريقة | كيف؟ | ملاحظات |
|---|---|---|
| مدير الملفات | ترفع الملفات (أو ملف zip ثم تفكه) من المتصفح | الأسهل للبداية؛ يدوي ومعرّض للنسيان |
FTP / SFTP | برنامج مثل FileZilla يزامن مجلدك مع الخادم | أسرع للملفات الكثيرة. و SFTP مشفّر فهو أفضل |
| Git | الخادم يسحب الكود من مستودعك | تعرف بالضبط ما المنشور وتتراجع بسهولة |
نشر تلقائي CI/CD | كل دفعة إلى GitHub تُختبر وتُنشر آليًّا | أسلوب الفرق المحترفة |
توقّع وتحقّق
اسم خادم القاعدة في الاستضافة المشتركة:
الصلاحية المناسبة لملفات PHP:
لنقل قاعدة بياناتك من XAMPP إلى الاستضافة:
SQL.أي طريقة رفع مشفّرة؟
FTP عادي غير مشفّر.الخلاصة
- قبل النشر: أخطاء مخفية، وأسرار خارج الكود، ولا ملفات تطوير، ومستخدم قاعدة خاص.
- ملف
bootstrapيكتشف البيئة، وsecrets.phpعلى الخادم فقط. - النشر: موقع ← قاعدة ← استيراد ← رفع ← أسرار ← صلاحيات ← اختبار.
- الملفات 644، والمجلدات 755، ولا 777 أبدًا.
- مدير الملفات و
SFTPوGitوCI/CD: من الأبسط إلى الأكثر احترافًا.
تحدٍّ تصميمي: انشر تطبيق إدارة المستخدمين
متقدمانشر تطبيق الدرس 21 (مع الدخول من الدرس 16) على استضافة مجانية أو استضافة القسم، ثم سلّم الرابط ولقطات الشاشة لمعلمك.
- أنشئ الموقع وقاعدة البيانات واستورد جدول users.
- ارفع الملفات، وأنشئ secrets.php على الخادم، واضبط الصلاحيات.
- اكتب في تقرير قصير: الاستضافة التي اخترتها ولماذا، وخطوات النشر، ومشكلة واجهتك وكيف حللتها.