2016-06-13 2 views
0

Я выполнил свой проект php с использованием платформы Symfony2. Теперь мне нужно разместить его на сервере cPanel. Веб-папка на моем сервере - public_html, а моя веб-папка проекта называется test. Но я могу только видеть мои папки, когда я открываю проект в браузере ... Это мой URL, http://silverdreamtours.com/test/Не удается разместить Symfony 2.7 application

Было бы здорово помочь, если кто-то может смотреть на это

Это моя файловая структура,

Root/ 
├─public_html 
    ├─www 
    │ ├─app.php 
    │ └─... 
    ├─test 
    ├─app 
    │ ├─config/ 
    │ └─ ... 
    ├─ vendor/ 
     └─ ... 

Мой app.php файл в каталоге WWW,

<?php 
    use Symfony\Component\ClassLoader\ApcClassLoader; 
    use Symfony\Component\HttpFoundation\Request; 

    //$loader = require_once __DIR__.'/../app/bootstrap.php.cache'; 
    $loader = require_once __DIR__.'/../test/app/autoload.php'; 

    // Enable APC for autoloading to improve performance. 
    // You should change the ApcClassLoader first argument to a unique prefix 
    // in order to prevent cache key conflicts with other applications 
    // also using APC. 
    /* 
    $apcLoader = new ApcClassLoader(sha1(__FILE__), $loader); 
    $loader->unregister(); 
    $apcLoader->register(true); 
    */ 

    //require_once __DIR__.'/../app/AppKernel.php'; 
    //require_once __DIR__.'/../app/AppCache.php'; 
    require_once __DIR__.'/../test/app/AppKernel.php'; 

    $kernel = new AppKernel('prod', false); 
    $kernel->loadClassCache(); 
    //$kernel = new AppCache($kernel); 

    // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter 
    //Request::enableHttpMethodParameterOverride(); 
    $request = Request::createFromGlobals(); 
    $response = $kernel->handle($request); 
    $response->send(); 
    $kernel->terminate($request, $response); 

И app_dev.php файл,

<?php 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Debug\Debug; 

// If you don't want to setup permissions the proper way, just uncomment the following PHP line 
// read http://symfony.com/doc/current/book/installation.html#checking-symfony-application-configuration-and-setup 
// for more information 
//umask(0000); 

// This check prevents access to debug front controllers that are deployed by accident to production servers. 
// Feel free to remove this, extend it, or make something more sophisticated. 
if (isset($_SERVER['HTTP_CLIENT_IP']) 
    || isset($_SERVER['HTTP_X_FORWARDED_FOR']) 
    || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server') 
) { 
    header('HTTP/1.0 403 Forbidden'); 
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); 
} 

//$loader = require_once __DIR__.'/../app/bootstrap.php.cache'; 
$loader = require_once __DIR__.'/../test/app/autoload.php'; 
Debug::enable(); 

//require_once __DIR__.'/../app/AppKernel.php'; 
require_once __DIR__.'/../test/app/AppKernel.php'; 

$kernel = new AppKernel('dev', true); 
$kernel->loadClassCache(); 
$request = Request::createFromGlobals(); 
$response = $kernel->handle($request); 
$response->send(); 
$kernel->terminate($request, $response); 

composer.json файл,

"extra": { 
     "symfony-app-dir": "app", 
     "symfony-web-dir": "web", 
     "symfony-assets-install": "relative", 
     "incenteev-parameters": { 
      "file": "app/config/parameters.yml" 
     }, 
     "branch-alias": { 
      "dev-master": "2.7-dev" 
     } 
    } 
+1

http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html – 1ed

ответ

2

Самый простой способ будет скопировать папку проекта на сервер через FTP и включают в себя домен, указывающий на папку «веб». Некоторое время это невозможно, поэтому вам нужно попробовать другими способами.

В symfony ваша общая папка по умолчанию находится в директории "web". Поэтому в вашем случае вам нужно переименовать эту папку в «www» like this, а затем скопировать полный проект на сервер так, чтобы ваша переименованная www-папка совпадала с позицией www на сервере. Вы можете не только переименовать эту папку, но также можете перемещаться за пределы папки symfony или размещать файл app.php в корне проекта, если вам это тоже нужно. Просто примените конфигурацию в кулинарной книге, чтобы сделать это каким-либо образом. Однако было бы удобно оставить источник вашего проекта за пределами общей папки, как я сначала объясню.

Допустим, что Вы имеете вы Symfony проект в папке, как этот

your-project/ 
├─ app/ 
│ ├─ config/ 
│ └─ ... 
├─ vendor/ 
│ └─ ... 
└─ web/ 
    ├─ app.php 
    └─ ... 

Теперь нужно переименовать папку «Web» для получения этой структуры:

your-project/ 
├─ app/ 
│ ├─ config/ 
│ └─ ... 
├─ vendor/ 
│ └─ ... 
└─ www/ 
    ├─ app.php 
    └─ ... 

Для делать это есть одна основная конфигурация. Во-первых, в приложение/Config/config.yml

# Assetic Configuration 
assetic: 
    read_from: "%kernel.root_dir%/../www" 

Если вы планируете просто переименовать эту папку, вот и все, чем вам нужно сделать. Теперь скажем, что это ваша файловая структура на сервере.

root/ 
├─ www/ 

Если это так, то вы должны скопировать все файлы в папке «ваш-проект» и вставить в корне, так что в пути позиция папки WWW будет то же самое. И в конце будет держать так

root/ 
    ├─ app/ 
    │ ├─ config/ 
    │ └─ ... 
    ├─ vendor/ 
    │ └─ ... 
    └─ www/ 
     ├─ app.php 
     └─ ... 

Как вы можете видеть, таким образом, вы можете разместить только один проект в этом сервере и у ваших проектов файлы могут быть смешаны с другими файлами, уже существующими в корневой папке, так, вы также можете вытащить папку www для получения этой структуры:

root/ 
    ├─www 
    ├─your-project 
    ├─ app/ 
    │ ├─ config/ 
    │ └─ ... 
    ├─ vendor/ 
     └─ ... 

Для этого вам необходимо изменить конфигурацию.yml

# Assetic Configuration 
    assetic: 
     read_from: "%kernel.root_dir%/../../www" 

Также необходимо изменить app.php и app_dev.php сейчас в папке www.

//look for this lines and change it like this 

$loader = require_once __DIR__.'/../your-project/app/autoload.php'; 
//... 
require_once __DIR__.'/../your-project/app/AppKernel.php'; 
//.. 

Теперь, когда вы получаете доступ к своему общественному дому, ваша www-папка получит запрос и вызовет фреймворк. Повторите установку и сброс активов после перемещения папок.

Надеюсь, это поможет вам.

+0

Привет, я попытался изменить «symfony-web-dir» в composer.json, но это не сработало. Было бы очень полезно помочь, если вы сможете объяснить немного больше (возможно, на примере). Очень жаль, что я немного новичок в этом – vimuth

+1

Я обновляю свой ответ для лучшего понимания. – abdiel

+0

Большое спасибо, и я попробовал ваш код, но кажется, что он не работает для меня. Я обновил свой вопрос с помощью последнего кода. Мне очень жаль беспокоить вас так. Я обещаю не только принять ваш ответ, но и рассказать всем, кого я знаю, поддержать, если вы можете мне помочь в этом. Да благословит вас Бог. – vimuth