J'utilise un hébergement partagé qui utilise cPanel comme panneau de configuration et dans cPanel public_html
est le répertoire racine par défaut. De ce fait, je ne parviens pas à faire fonctionner correctement mon application Laravel.
Est-il possible de faire en sorte que Laravel utilise public_html
au lieu du dossier public?
Assez facile à trouver cela avec une simple recherche.
Dans votre index.php ajoutez les 3 lignes suivantes.
/*
|--------------------------------------------------------------------------
| 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__;
});
Modifier:
Comme Burak Erdem l'a mentionné, une autre option (et plus préférable) consiste à mettre cela dans la méthode \App\Providers\AppServiceProvider
register()
.
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// ...
$this->app->bind('path.public', function() {
return base_path('public_html');
});
}
Si la solution index.php
de Robert ne fonctionne pas pour vous, vous pouvez également enregistrer le code suivant à Application Service Provider (App\Providers\AppServiceProvider.php)
.
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
public function register()
{
$this->app->bind('path.public', function() {
return base_path().'/public_http';
});
}
Ce n'est pas si facile comme contraignant. Ferrolho fournit la réponse la plus propre et la plus élaborée ici https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
Mais la réponse la plus rapide consiste à créer un lien symbolique nommé public pointant sur public_html et à mettre index.php dans le dernier.
Je veux juste mettre à jour toutes les réponses précédentes. Si votre public_html n'est pas dans le dossier laravel, vous devez utiliser ce code:
$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
Ces réponses n'ont pas fonctionné pour laravel 5.5, mais ma propre méthode peut vous aider.
Étape 1: Supprimez tous les fichiers sauf le fichier public dans le répertoire principal du serveur.
Étape 2: Fichier public dans le fichier public_html sur le serveur.
Étape 3: Extrayez le fichier index.php de public_html et changez-le comme ceci.
Étape 3a:
Originale -> require __DIR__.'/../vendor/autoload.php';
Changements -> require __DIR__.'/../**created_folder**/vendor/autoload.php';
Original -> $app = require_once __DIR__.'/../bootstrap/app.php';
Changements -> $app = require_once __DIR__.'/../**Created_folder**/bootstrap/app.php';
Étape 4: Créer symlinkcreate.php
Étape 4A: <?php
symlink('/home/**server_directory**/**created_folder**/storage/app/public','/home/**server_directory**/public_html/storage');
Étape 4B: votre site web/symlinkcreate.php visite
Étape 4C: symlinkcreate.php supprimez votre serveur.
Enfin, la structure du répertoire ressemble à ceci:
/etc
/logs
/lscache
/mail
/Your_Created_Folder
../LARAVEL_FOLDERS
/public_html
../css
../js
../.htaccess
../index.php
../web.config
/ssl
/tmp
Terminer.
Laravel 5.5 public_html sorunu için bu cevabı gönül rahatlığıyla kullanabilirsiniz.
Serveur
Les méthodes décrites dans la rubrique fonctionnent parfaitement. Par conséquent, la méthode de registre App\Providers\AppServiceProvider.php devrait faire le travail:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
public function register()
{
$this->app->bind('path.public', function() {
return base_path() . '/public_http';
});
}
Développement des services artisanaux php locaux
Cependant, il existe un autre problème que vous pouvez rencontrer. Si vous développez votre application sur une machine locale et que vous utilisez la commande php artisan serve
pour la servir, vous allez la décomposer avec la syntaxe ci-dessus uniquement. Vous devez toujours ajuster le fichier server.php qui existe dans le répertoire principal. Éditez le contenu de celui-ci et remplacez chaque occurrence de /public
par /public_html
, afin qu'il ressemble à ceci:
<?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';
Après ça. Arrêtez simplement votre serveur et rechargez-le avec php artisan serve
.
Développement de laravel-mix front end
Si vous utilisez webpack et laravel-mix pour générer vos fichiers css et js, une mise à jour est également nécessaire. Sans modifier webpack.mix.js, vous obtiendrez quelque chose comme ceci sur npm run watch
ou npm run production
:
.
..
public
_html
js
public_html
css
public_html
Donc, ça va gâcher votre code. Pour clarifier cela, vous devez fournir un chemin public à votre fichier webpack.mix.js. Cela pourrait ressembler à ceci:
const mix = require('laravel-mix');
mix.setPublicPath('public_html/');
mix.js('resources/js/app.js', 'js')
mix.sass('resources/sass/app.scss', 'css');
Cela va changer la définition par défaut de public directory de public
à public_html
et les lignes suivantes fournissent un chemin relatif à votre valeur setPublicPath.
Bonne codage.
Pour ceux qui doivent modifier le chemin public afin qu’il soit également disponible pour Artisan, ajoutez ce qui suit à bootstrap/app.php
, juste après la dernière méthode singleton
:
$app->bind('path.public', function () {
return base_path("<your public directory name>");
});
Pour moi, rien de tout cela n'a fonctionné jusqu'à ce que je modifie le dossier public racine dans les paramètres du serveur. En production, il est en /etc/nginx/sites-enabled/<your_site_name>
. Modifiez-le avec un éditeur de texte et faites défiler l'écran jusqu'à voir le chemin racine pointant vers le dossier /public
. Changez-le en votre nouveau dossier public et redémarrez le serveur. Au niveau local, je devais changer le chemin dans Homestead.yaml
et /etc/nginx/sites-enabled/<your_site_name>
après que je sois entré dans Vagrant. vagrant reload --provision
pour vous assurer qu'il est bien compris. Ensuite, j'ai également modifié index.php
et enregistré un nouveau chemin dans le fournisseur de services au cas où, mais il semble fonctionner sans. Je n’utilise cependant aucune dépendance de tiers avec Laravel, je ne sais donc pas si cela fonctionnera dans ce cas.
salut les gars ça marche pour moi ... vous pouvez l'utiliser
aller à cette adresse:
/app/Providers/AppServiceProvider.php
et ajoutez ce code à la fin du fichier ....
public function register()
{ $this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
}