Uzyskanie wewnętrznego błędu serwera 500 w Laravel 5+ Ubuntu 14.04


85

Wiele razy instalowałem Laravel w systemie operacyjnym Windows, ale nigdy nie wystąpił tego typu problem. Ten wewnętrzny serwer 500 zwykle występuje, gdy moduł "mod_rewrite" nie jest włączony.

Jednak w Ubuntu 14.04 ten problem przyprawia mnie o ból głowy. Zainstalowałem rewrite_mod, ale też nie działa. Dałem dostęp do wszystkich moich folderów i plików wewnątrz tj

/ var / www / html / laravel_project

Wciąż nie działa. Zmieniono również .htaccess z oryginalnego na ten.

    +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Posiadam również wszystkie niezbędne rozszerzenia potrzebne do Laravel 5+. Czy zostało coś, czego nie zrobiłem?


5
więc sprawdź swój dziennik błędów, aby zobaczyć szczegóły dotyczące 500. dopóki nie wiesz, że to masz, nie ma sensu machać po całym miejscu.
Marc B

2
Dlaczego ma po prostu +FollowSymLinksna górze? Powinien być Options +FollowSymLinks.
Mike Rockétt

1
"Zainstalowałem rewrite_mod, ale ..." - i zezwoliłem na odpowiedni dostęp dla .htaccess AllowOverridew konfiguracji twojego serwera?
MrWhite

@MikeRockett Niedawno usunąłem "Opcje", gdy je zachowuję, przeglądarka staje się pusta na biało, a gdy jej nie zachowuje, przeglądarka zwraca błąd żądania 500, ale w obu przypadkach przeglądarka zwraca błąd 500. !
DpEN

1
@MikeRockett .. Usunąłem "/../" z pliku index.php i próbowałem i pokazywałem różne błędy w uprawnieniach do pliku, a następnie chmod i ustawiłem uprawnienia do odczytu / zapisu i zadziałało !!! Dzięki za pomoc bracie !!
DpEN

Odpowiedzi:


214

Wreszcie rozwiązałem problem

  • To nie plik .htaccess był przyczyną problemu, ani plik index.php. Problem polegał na dostępie do plików i wymaganiu uprawnień.

Aby rozwiązać problem, uruchomiłem następujące polecenia przez terminal.

sudo chmod -R 755 laravel_blog

a następnie wpisz poniżej, aby umożliwić laravel zapisywanie pliku w folderze przechowywania

chmod -R o+w laravel_blog/storage

Te dwa polecenia rozwiązały problem.


1
Dzięki, miałem ten problem podczas instalowania laravela na świeżej dystrybucji ubuntu 14.04 na silniku obliczeniowym Google, to go rozwiązało.
Alex

1
Dzięki za to. To rozwiązało problem na Ubuntu i Mac.
Arunabh Das

2
to jest bardzo zła rada, chmod ustawia wszystkie pliki na + x. Zakładam, że chciałeś to zrobić dla katalogów, w takim przypadku użyłbyś find.
MightyPork

gdzie powinienem włączyć cd (zmienić katalog), aby wykonać to polecenie?
Anastasie Laurent

1
Potrzebujesz wielu ciasteczek. Działa dobrze na LAMP Ubuntu 16.04 Instalacja Digital Ocean.
Abhishek Saini

71

Utwórz plik .env i uruchom:

php artisan key:generate

To zadziałało dla mnie po ściągnięciu projektu git.

Po utworzeniu pliku .env i wygenerowaniu klucza, uruchom poniższy kod:

php artisan cache:clear 
php artisan config:clear

3
To zadziałało dla mnie. Nie popełnij błędu noob, po zainstalowaniu projektu laravel zmień nazwę .env.example na .env lub klucz php artisan: generowanie ulegnie awarii
Armin

OK, czy to nowa rzecz? Pierwszy raz napotykam ten problem
Robert Rocha

1
php artisan cache:clear php artisan config:cleardziała dla mojej sprawy
Nurkartiko

27

Po zainstalowaniu uruchom poniższe polecenie

sudo chmod 755 -R laravel
chmod -R o+w laravel/storage

tutaj "laravel" to nazwa katalogu, w którym zainstalowano laravel


za pomocą tego polecenia upewnij się, że uruchomiłeś poleceniecomposer install
Iftikhar Ali Ansari

sudo chmod -R 755 laravellokalizacja -R jest nieprawidłowa
Hïkmãt Iskandar

20

Spróbuj sprawdzić, czy masz .envplik.

Przeważnie ta rzecz może spowodować coś takiego. Spróbuj utworzyć plik, a następnie skopiuj wszystko z .env.example, wklej go do utworzonego pliku i nadaj mu nazwę .env. lub jsut po prostu zmień nazwę .env.examplepliku na .envi uruchomphp artisan key:generate


ta pomoc w pierwszej próbie +
AZinkey

14

Upewnij się, że plik .env zawierający APP_KEY istnieje w katalogu głównym.

To, co powinno znajdować się w .env, nie zostało wyraźnie określone w innych rozwiązaniach i pomyślałem, że sprowadzę to do powyższego zdania.

To naprawiło mój błąd 500 podczas nowej instalacji Laravel.

Kroki:

  1. Utwórz plik .env w katalogu głównym (np. touch .env)
  2. Upewnij się, że zawiera co najmniej jedną linię: APP_KEY=
  3. Wygeneruj klucz aplikacji w terminalu: php artisan key:generate

Uwagi:

  • Moja konkretna instalacja nie zawierała żadnego pliku .env (przykład lub inaczej)

  • Po prostu posiadanie pustego pliku .env nie działa.

  • Plik env zawierający parametry, ale bez APP_KEYparametru, nie działa.

Błąd ?: Podczas generowania klucza aplikacji w terminalu może się to udać, jednak żaden klucz nie zostanie umieszczony w pliku .env, jeśli plik nie ma wcześniej istniejącej APP_KEY=linii.

Jako odniesienie, oto oficjalny plik .env z przydatnymi parametrami bazowymi. Skopiuj i wklej to, czego potrzebujesz:

https://github.com/laravel/laravel/blob/master/.env.example


12

Napotkałem podobny błąd. Sprawdziłem dane logowania /var/log/apache2/error.logi znalazłem wyjątek UknownValueException

Zmieniłem właściciela na mojego użytkownika Apache folderu przechowywania w ramach projektu reż.

sudo chown -R www-data:www-data ./storage

W moim przypadku właścicielem procesu apache2 jest www-data, więc zmień to na swoje, można to znaleźć w pliku konfiguracyjnym apache2. Mam nadzieję, że to ci się przyda.


12

Naprawiłem za pomocą tego polecenia:

   rm -rf app/storage/logs/laravel.logs
   chmod -R 777 app/storage,
   php artisan cache:clear,
   php artisan dump-autoload OR composer dump-autoload

Następnie zrestartuj serwer, a XAMPP lub inny i to powinno działać.


3
777 jest bardzo złym poleceniem i da dostęp do ZAPISU każdemu w Internecie. 644 jest bardziej wskazane.
Zac Grierson

9

Niech inne rozwiązanie tego problemu:

Zainstaluj wymagane pakiety, uruchamiając polecenie composer z katalogu głównego projektu:

sudo composer install

AKTUALIZACJA:

  • Nie należy uruchamiać tego polecenia na serwerze produkcyjnym, ale niektóre problemy z narzędziem Composer można rozwiązać za pomocą tego polecenia na lokalnych środowiskach.

EDYTOWAĆ:


1
Co to do cholery jest, czy naprawdę wiesz, na co odpowiadasz!
Jimmy Obonyo Abor

3
@JimmyObonyoAbor Właściwie to działa. Według dzienników, 500 było spowodowane brakiem niektórych plików w katalogu / vendor. Jak to naprawić? Uruchomienie instalacji / aktualizacji Composera. Dzięki i za głosowanie, Christos
Papoulas

5
Uważam, że uruchomienie tego polecenia z sudo jest potencjalną luką w zabezpieczeniach
Shay

5

Miałem zainstalowane PHP 7.0 i PHP 7.1 i używałem PHP 7.1 w linii poleceń, a PHP 7.0 było włączone na Apache, co może powodować problemy, gdy używasz Laravel Framework i lokalnego hosta Apache2 z laravelem.

Najpierw sprawdź plik kompozytora, aby zobaczyć wersję PHP.

"php": "^7.1.3",
"laravel/framework": "5.6.*",

Sprawdź swoją aktualną wersję php w linii poleceń

php -v

Sprawdź swoją aktualnie włączoną wersję php na Apache, zrobiłem za pomocą przeglądarki.

http://localhost

Jeśli to nie to samo, wyłącz aktualną wersję i włącz najnowszą.

sudo a2dismod php7.2

sudo a2enmod php7.1

sudo service apache2 restart

Następnie zmień uprawnienia do folderu

sudo chmod 755 -R blog

do folderu przechowywania

chmod -R o+w blog/storage

5

Częsty problem podczas korzystania z git:

Laravel's .gitignore ignores the .env file which when missing generates this error

Rozwiązano to, ręcznie dodając plik .env na serwerze lub przesyłając go przez FTP


4

Czasami jest problem z wersją php. Musimy zmienić wersję php z serwera. Po prostu zapisz poniżej ciąg w pliku .htaccess :

AddHandler application/x-httpd-php5 .php

3

Najpierw zezwól na wszystkie uprawnienia dla folderu projektu (powiedzmy, że nazywa się laravel), dla podfolderu przechowywania i jego podfolderu logów oraz dla podfolderu dostawcy (laravel / storage, laravel / storage / logs i laravel / vendor).

Następnie sprawdź, czy masz plik .env - jeśli nie, możesz uruchomić:

$ mv .env.example .env

aby zmienić nazwę pliku wbudowanego .env.example na wymagany .env.

W przeciwnym razie włącz tryb debugowania - otwórz plik .env i ustaw

APP_DEBUG=true

i otwórz laravel / config / app.php i zmień

'debug' => env('APP_DEBUG', false), 

do

'debug' => env('APP_DEBUG', true),

aby dowiedzieć się, jaki jest powód Twojego błędu.


4
Nie ma powodu, dla którego powinieneś edytować config / app.php w ten sposób. Zaprzeczyłoby to całemu celowi pliku .env.
Nathan

Otrzymywałem błędy usługi wewnętrznej, gdy uruchomiłem aplikację laravel na serwerze testowym (w trybie produkcyjnym). Ustawienie APP_DEBUG = true pozwoliło mi zobaczyć szczegóły błędu, więc mogłem znaleźć i naprawić problem.
Debbie V

3

Uruchom te dwie komendy w katalogu, w którym zainstalowano Laravel:

sudo chmod 755 -R DIRECTORY_NAME
chmod -R o+w DIRECTORY_NAME/storage

Następnie wyczyść pamięć podręczną i zrzuć automatyczne ładowanie:

php artisan cache:clear
composer dump-autoload

3

Wielokrotnie miałem do czynienia z tym problemem. Wypróbuj jeden z tych kroków, który bardzo mi pomógł. Może ci też pomoże.

  1. Przede wszystkim sprawdź uprawnienia do plików.
  2. Aby naprawić uprawnienia do plików, sudo chmod 755 -R twój_project
  3. Następnie chmod -R o + w your_project / storage, aby zapisać plik w folderze przechowywania.
  4. php artisan cache: wyczyść
    plik Composer dump-autoload
  5. klucz php artisan: generuj
  6. Następnie sprawdź wymagania serwera zgodnie z wymaganiami laravel.
  7. Wiele razy otrzymałeś ten błąd z powodu wersji php . Spróbuj zmienić wersję php w cpanel.
  8. Następnie odpowiednio skonfiguruj plik .htaccess

3

Przeczytałem wszystkie komentarze i sugestie. 500 - KOD BŁĘDU HTTP reprezentuje wewnętrzny błąd serwera.

Przyczyny tego błędu:

  • Jest to głównie spowodowane problemami z pozwoleniami
  • Nie znaleziono zmiennych środowiskowych lub .envnie znaleziono pliku w katalogu głównym
  • Problem z rozszerzeniami PHP
  • Problem z bazą danych

Naprawić:

  • Ustaw odpowiednie uprawnienia:
    • Uruchom te polecenia (Ubuntu / Debian)
find /path/to/your/root/dir/ -type f -exec chmod 644 {} \;
find /path/to/your/root/dir/ -type d -exec chmod 755 {} \;

chown -R www-data:www-data /path/to/your/root/dir/

chgrp -R www-data storage bootstrap/cache
chmod -R ug+rwx storage bootstrap/cache
  • Jeśli plik .env nie istnieje, utwórz go touch .envi wklej zmienne środowiskowe, a następnie uruchom
   php artisan key:generate
   php artisan cache:clear
   php artisan config:clear
   composer dump-autoload
  • Sprawdź swój plik php.ini i odkomentuj potrzebne rozszerzenia (w niektórych przypadkach musisz zainstalować rozszerzenie uruchamiając to polecenie apt-get install php7.2-[extension-name]
  • Sprawdź poświadczenia i wartości bazy danych w .envpliku. I przyznaj uprawnienia użytkownikowi bazy danych do tej bazy danych.

Są to typowe problemy, z którymi prawdopodobnie napotkasz podczas wdrażania aplikacji laravel, i jeden, od którego zaczniesz otrzymywać wszystkie te polecenia. Proponuję stworzyć skrypt, który zaoszczędzi Twój czas.


2

Jeśli używasz włóczęgi, spróbuj tego:

Najpierw usuń config.php z katalogu current / vendor.

Uruchom następujące polecenie:

php artisan config:clear
php artisan clear-compiled
php artisan optimize

NIE URUCHAMIAJ konfiguracji php artisan: cache.

Mam nadzieję, że to pomoże.


1

Uruchom te dwie komendy w katalogu głównym laravel

znajdź * -type d -print0 | xargs -0 chmod 0755 # dla katalogów

odnaleźć . -type f -print0 | xargs -0 chmod 0644 # dla plików


1

Mam podobny problem ze współdzielonym hostem. Miałem błąd 500. Właśnie naprawiłem, sprawdzając wersję Laravel i wersję PHP. Błąd był spowodowany tym, że Laravel 5.6 nie działa na PHP 7.0.x Kiedy już to wiem, po prostu rekonfiguruję projekt na Laravel 5.5, który jest kompatybilny z PHP 7.0.x, teraz wszystko jest w porządku. Innym powodem, dla którego czasami mam problemy, jest uszkodzenie FTP. Pliki są uszkodzone i muszę przesłać projekt więcej niż raz. Mam nadzieję, że ta pomoc w przyszłości nie znalazłem tylu informacji w tym temacie.


1

Dla tych z Was, którzy tak jak ja nadal mają błędy po wypróbowaniu wszystkich innych odpowiedzi:

Sprawdź wersję używaną przez apache php, najnowszy laravel działa tylko z php7.1. Więc musisz:

sudo a2dismod php[yourversion]
sudo a2enmod php7.1
sudo systemctl restart apache2

mam nadzieję że to pomoże


1

jeśli jest na serwerze rzeczywistym, spróbuj tego

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /


# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

następnie upewnij się, że wersja php w twoim pliku composer.json jest taka sama, jak na serwerze.

Sprawdź swoją wersję php w swoim terminalu za pomocą php -v



1

Po pierwsze, jeśli w repozytorium laravel nie ma pliku .env. Skopiuj i wklej plik .env.example i zmień jego nazwę na .env. następnie otwórz plik .env iw części bazy danych podaj opis bazy danych. Uruchom: php artisan klucz: wygeneruj pamięć podręczną php artisan: wyczyść php artisan config: cache php artisan config: wyczyść kompozytor dump-automatyczne ładowanie php artisan serv


0

Według logów:

[06-Feb-2016 22:38:48 Europe/Berlin] PHP Warning:  require(/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17
[06-Feb-2016 22:38:48 Europe/Berlin] PHP Fatal error:  require(): Failed opening required '/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php' (include_path='.:/Applications/MAMP/bin/php/php7.0.0/lib/php') in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17
[06-Feb-2016 22:43:37 Europe/Berlin] PHP Warning:  require(/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17
[06-Feb-2016 22:43:37 Europe/Berlin] PHP Fatal error:  require(): Failed opening required '/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php' (include_path='.:/Applications/MAMP/bin/php/php7.0.0/lib/php') in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17

Podczas otwierania plików do folderu / vendor występują pewne błędy.

Instalując i aktualizując za pomocą narzędzia Composer, udało mi się ostatecznie rozwiązać problem.

sudo composer install
sudo composer update

0

Upewnij się, że folder przechowywania z previlege (chmod o + w), działa dla mnie jak urok.



0

Napotkałem ten problem i naprawiłem go, aktualizując moją wersję php w Apache do 5.6.x.


0

Zmień uprawnienia do folderu internetowego tylko za pomocą tego polecenia:

sudo chmod 755 -R your_folder


0

Właśnie uruchomiłem następujące polecenie:

php artisan passport:install

Używałem paszportu, aby uruchomić moją aplikację całkowicie opartą na API i Vue.js. Laravel działał dobrze, ale za każdym razem, gdy próbowałem zalogować się przez moje API, otrzymywałem błąd. Po uruchomieniu polecenia i zaktualizowaniu client_id i client_secret w moich plikach Laravel, a następnie przesłaniu nowych aktualizacji na serwer live, problem został rozwiązany. W moim modelu użytkownika mam następujący skrypt:

public function generateToken($request)
{
    $http = new \GuzzleHttp\Client();
    $response = $http->post(URL::to('/').'/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '6',
            'client_secret' => 'x3yhgWVqF8sSaMev4JI3yvsVxfbgkfRJmqzlpiMQ',
            'username' => $this->email,
            'password' => $request->input('password'),
            'scope' => '',
        ],
    ]);
    //  Lets get an array instead of a stdObject so that we can return without errors
    $response = json_decode($response->getBody(), true);

    return oq_api_notify([
                'auth' => $response,                                        //  API ACCESS TOKEN
                'user' => $this->load(['settings'])->toArray(),
            ], 201);
}

Właśnie zaktualizowałem client_id i client_secret dopiero potem zapisałem. Ponieważ polecenie paszport daje dwa klucze klienta:

1) Klient dostępu osobistego (client_id i client_secret)

2) Przyznanie hasła klientowi (client_id i client_secret)

Użyłem klienta nadania hasła. Mam nadzieję, że to komuś pomoże :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.