اذهب إلى المحتوى
  • 0

ظهور خطأ Internal Server Error عند حذف الملفات في لارافل

Amir Alsaeed

السؤال

لدي تطبيق عندما يقوم المستخدم فيه بالتسجيل لأول مرة يحصل على صورة شخصية افتراضية، ويستطيع بدوره تغييرها إلى صورة خاصة أو حذف الصورة التي أضافها والعودة إلى الصورة الافتراضية.

ولكن عندما يقوم المستخدم بحذف آخر صورة قام بإضافتها للعودة إلى الصورة الافتراضية، يتم تحديث المسار في قاعدة البيانات ولكن قبل أن يتم حذف ملف الصورة من على الخادم يظهر الخطأ التالي:

500 (Internal Server Error)

ولا يتم حذف ملف الصورة.

الجزء الخاص بمسار حذف الصورة:

Route::post('/profile/delete/{id}/{fileName}', [App\Http\Controllers\ProfileController::class, 'deleteimg'])->name('profile.deleteimg');

الجزء الخاص بالمتحكّم:

public function deleteimg($id, $fileName) {
    $user = Auth::user();
    $user->avatar = "default.png";
    $user->save();

    if(File::exists(public_path('images/profiles' . $fileName))){
        File::delete(public_path('images/profiles' . $fileName));
    }
}

وإن الكود يقوم فعلاً بتغيير القيمة إلى default.png في قاعدة البيانات ولكن الخطأ فقط في حذف الملف من الخادم. كيف يمكنني حل المشكلة؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

الخطأ 500 هو خطأ عام فالأفضل أن تٌفعل وضع التطوير و التصحيح حتى تظهر الأخطاء الفعلية التي تُسبب المُشكلة من خلال 

APP_DEBUG=true

في ملف env.

تحتاج إلى إستيراد كلاس File الذي تستخدمه تأكد من ذلك:

use Illuminate\Support\Facades\File;

إن كان profiles عبارة عن مجلد فينقصك / في مسار الملف:

if(File::exists(public_path('images/profiles/' . $fileName))){
  File::delete(public_path('images/profiles/' . $fileName));
}

قد تكون المُشكلة مُشكلة أذونات على الملفات تأكد من إعطائك الأذونات الصحيحة للملفات.

إن كنت قد غيرت مكان مجلد public أو قمت بحذفه لسبب ما على الخادم تحتاج إلى تغيير الدالة public_path حتى تقوم بإرجاع المسار الصحيح كما يلي في الملف index.php:

$app->bind('path.public', function() {
    return __DIR__;
});

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

بداية تأكد أنك تقوم بتضمين الواجهة File في الملف قبل إستعماله .

<?php 

namespace App\Http\Controllers;


use Illuminate\Support\Facades\File;
// أو
use File;

كما يمكنك تشغيل وضع الـ Debug و ضبطه كـ ON حتى يتم تشخيص الأخطاء و تسجيلها بشكل أفضل .

في ملف متغيرات البيئة env. قم بإعطاء القيمة true عوضا عن false للمتغير APP_DEBUG : 

APP_DEBUG=true

قد تحتاج كخطوة إضافية لمحو الملفات المؤقتة : 

php artisan cache:clear

الان قم بالتصفح إلى مسار الملف و سيظهر لك الخطأ بشكل أفضل و أكثر تفصيلا . 

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

من الممكن أن السبب في نوع طلب request , فأنت تستخدم الميثود post, حاول تغييرها لتكون delete

Route::post('/profile/delete/{id}/{fileName}', [App\Http\Controllers\ProfileController::class, 'deleteimg'])-
       ^^^^ 
>name('profile.deleteimg');


to


Route::delete('/profile/delete/{id}/{fileName}', [App\Http\Controllers\ProfileController::class, 'deleteimg'])-
       ^^^^^^
>name('profile.deleteimg');

ثم جرب الأمر مرة أخرى

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...