it-swarm.com.de

So ändern Sie den öffentlichen Ordner in public_html in laravel 5

Ich verwende ein Shared Hosting, das cPanel als Steuerungsfeld verwendet und im cPanel public_html das Standard-Stammverzeichnis ist. Aus diesem Grund kann ich meine Laravel-Anwendung nicht ordnungsgemäß ausführen.

Gibt es eine Möglichkeit, Laravel public_html anstelle eines öffentlichen Ordners zu verwenden?

29
Ravexina

Mit einer einfachen Suche leicht zu finden.

Siehe: https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5

Fügen Sie in Ihrer index.php die folgenden 3 Zeilen hinzu.

/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/

$app = require_once __DIR__.'/../bootstrap/app.php';

// set the public path to this directory
$app->bind('path.public', function() {
    return __DIR__;
});

Bearbeiten:


Wie Burak Erdem erwähnt hat, besteht eine andere (und vorzuziehende) Option darin, dies in die \App\Providers\AppServiceProviderregister()-Methode zu setzen.

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    // ...

    $this->app->bind('path.public', function() {
        return base_path('public_html');
    });
}
41
Robert

Wenn Roberts index.php-Lösung für Sie nicht funktioniert, können Sie den folgenden Code auch unter Application Service Provider (App\Providers\AppServiceProvider.php) registrieren.

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

public function register()
{
    $this->app->bind('path.public', function() {
        return base_path().'/public_http';
    });
}
17
Burak Erdem

Es ist nicht so einfach wie das Binden. Die sauberste und ausführlichere Antwort erhalten Sie von ferrolho hier https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5

Die schnellste Antwort ist das Erstellen eines symbolischen Links mit dem Namen public, der auf public_html verweist, und Ihre index.php in die letzte einfügen. 

1
Diego Viniegra

Möchten Sie nur alle vorherigen Antworten aktualisieren, wenn sich Ihr public_html nicht im Laravel-Ordner befindet, müssen Sie diesen Code verwenden:

$this->app->bind('path.public', function() {
   return realpath(base_path().'/../public_html');
});
1
Alex

Diese Antworten haben für Laravel 5.5 nicht funktioniert, aber meine eigene Methode kann Ihnen helfen.

Schritt 1: Löschen Sie alle Dateien außer der öffentlichen Datei im Hauptverzeichnis auf dem Server.

Schritt 2: Öffentliche Datei in die Datei public_html auf dem Server.

Schritt 3: Laden Sie die Datei index.php aus public_html und ändern Sie sie so.

Schritt 3A: 

Orginal -> require __DIR__.'/../vendor/autoload.php';

Änderungen -> require __DIR__.'/../**created_folder**/vendor/autoload.php';

Original -> $app = require_once __DIR__.'/../bootstrap/app.php';

Änderungen -> $app = require_once __DIR__.'/../**Created_folder**/bootstrap/app.php';

Schritt 4: Erstellen Sie symlinkcreate.php

Schritt 4A: <?php symlink('/home/**server_directory**/**created_folder**/storage/app/public','/home/**server_directory**/public_html/storage');

Schritt 4B: yourwebsite.com/symlinkcreate.php besuchen

Schritt 4C: symlinkcreate.php Löschen Sie Ihren Server.

Schließlich sieht die Verzeichnisstruktur folgendermaßen aus:

/etc
/logs
/lscache
/mail
/Your_Created_Folder
  ../LARAVEL_FOLDERS
/public_html
  ../css
  ../js
  ../.htaccess
  ../index.php
  ../web.config
/ssl
/tmp

Fertig.

Laravel 5.5 public_html sorunu için bu cevabı gönül rahatlığıyla kullanabilirsiniz.

1
T.Arslan

Server

Die in diesem Thema beschriebenen Methoden funktionieren einwandfrei. Daher sollte die Registrierungsmethode App\Providers\AppServiceProvider.php die folgende Aufgabe erfüllen:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

public function register()
{
    $this->app->bind('path.public', function() {
        return base_path() . '/public_http';
    });
}

Lokale PHP-Handwerker dienen der Entwicklung

Es gibt jedoch noch ein weiteres Problem, das Sie erfahren können. Wenn Sie Ihre App auf einem lokalen Computer entwickeln und den Befehl php artisan serve zum Bereitstellen Ihrer App verwenden, wird die App nur mit der obigen Syntax gebrochen. Sie müssen noch die server.php-Datei anpassen, die im Hauptverzeichnis vorhanden ist. Bearbeiten Sie den Inhalt und ersetzen Sie jedes Vorkommen von /public durch /public_html, sodass es so aussieht:

<?php

/**
 * Laravel - A PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <[email protected]>
 */

$uri = urldecode(
    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);

// This file allows us to emulate Apache's "mod_rewrite" functionality from the
// built-in PHP web server. This provides a convenient way to test a Laravel
// application without having installed a "real" web server software here.
if ($uri !== '/' && file_exists(__DIR__.'/public_html'.$uri)) {
    return false;
}

require_once __DIR__.'/public_html/index.php';

Nachdem. Stoppen Sie einfach Ihren Server und laden Sie ihn erneut mit php artisan serve

Frontend Laravel-Mix Entwicklung

Wenn Sie Webpack und Laravel-Mix verwenden, um Ihre CSS- und JS-Dateien zu generieren, muss dies ebenfalls aktualisiert werden. Ohne webpack.mix.js zu optimieren, erhalten Sie am npm run watch oder npm run production so etwas wie dieses:

.
..
public
  _html
    js
  public_html
    css
public_html

Es wird also Ihren Code durcheinander bringen. Um dies zu verdeutlichen, müssen Sie einen öffentlichen Pfad zu Ihrer Datei webpack.mix.js angeben. Es könnte so aussehen:

const mix = require('laravel-mix');

mix.setPublicPath('public_html/');
mix.js('resources/js/app.js', 'js')
mix.sass('resources/sass/app.scss', 'css');

Dadurch wird die Standarddefinition des öffentlichen Verzeichnisses von public in public_html geändert. Die nächsten Zeilen enthalten einen relativen Pfad zu Ihrem setPublicPath-Wert.

Glückliche Kodierung.

1
David

Für diejenigen, die den öffentlichen Pfad ändern müssen, damit er auch für Artisan verfügbar ist, fügen Sie bootstrap/app.php unmittelbar nach der letzten singleton-Methode Folgendes hinzu:

$app->bind('path.public', function () {
    return base_path("<your public directory name>");
});
0
Mike Rockétt
  1. In bootstrap/app.php:

    Hinzufügen

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

    gleich nach

    $app = new Illuminate\Foundation\Application(
      realpath(__DIR__)
    );
    
  2. Fixing server.php:

    Veränderung

    if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
      return false;
    }
    
    require_once __DIR__.'/public/index.php';
    

    zu

    if ($uri !== '/' && file_exists(__DIR__.'/public_html'.$uri)) {
      return false;
    }
    
    require_once __DIR__.'/public_html/index.php';
    
  3. Ändern Sie in .gitignore

    /public/hot
    /public/storage
    

    zu

    /public_html/hot
    /public_html/storage
    
  4. Ändern Sie in webpack.mix.js

    mix.js('resources/js/app.js', 'public/js')
      .sass('resources/sass/app.scss', 'public/css');
    

    zu

    mix.js('resources/js/app.js', 'public_html/js')
      .sass('resources/sass/app.scss', 'public_html/css');
    

Ich bin immer noch auf der Suche nach einem Fix für die asset() -Funktion, die kaputt bleibt ...

0
Cameron Hudson

Für mich funktionierte nichts davon, bis ich den öffentlichen Stammordner in den Servereinstellungen geändert habe. In der Produktion ist es in /etc/nginx/sites-enabled/<your_site_name>. Bearbeiten Sie es mit einem Texteditor und scrollen Sie einfach, bis Sie den Pfad zum Ordner /public sehen. Ändern Sie dies in den neuen öffentlichen Ordner und starten Sie den Server neu. Auf local musste ich den Pfad in Homestead.yaml und /etc/nginx/sites-enabled/<your_site_name> ändern, nachdem ich in Vagrant SSHed hatte. vagrant reload --provision, um sicherzustellen, dass er sich verfangen hat. Dann habe ich auch index.php bearbeitet und für den Fall einen neuen Pfad beim Dienstanbieter registriert, aber es scheint ohne zu funktionieren. Ich benutze jedoch keine Abhängigkeiten von Drittanbietern mit Laravel, daher weiß ich nicht, ob dies in diesem Fall funktioniert.

0
Arthur Tarasov

hallo Jungs, es funktioniert für mich ... Sie können es verwenden 

gehe zu dieser Adresse: 

/app/Providers/AppServiceProvider.php

und diesen Code an das Ende der Datei anhängen ....

public function register()
{   $this->app->bind('path.public', function() {
    return realpath(base_path().'/../public_html');
  });
}
0
Ahmadreza