无法托管symfony 2.7应用程序

时间:2016-06-13 12:41:43

标签: php symfony

我使用Symfony2框架完成了我的php项目。现在我需要在带有cPanel的服务器中托管它。我服务器中的Web文件夹是public_html,我的项目Web文件夹名为test。但是当我在浏览器中打开项目时,我只能看到我的文件夹... 这是我的网址, http://silverdreamtours.com/test/

如果有人可以调查它会很有帮助

这是我的文件结构,

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

我在www目录中的app.php文件,

<?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 个答案:

答案 0 :(得分:2)

最简单的方法是将项目文件夹通过ftp复制到服务器,并包含指向“web”文件夹的域。有时候这是不可能的,所以你需要尝试其他方式。

在symfony中,默认情况下,您的公用文件夹位于“web”目录下。因此,在您的情况下,您需要将该文件夹重命名为“www”like this,然后将整个项目复制到服务器,方式是重命名的www文件夹与服务器中www的位置匹配。您不仅可以重命名该文件夹,还可以移动到symfony文件夹之外,或者如果您需要,也可以将app.php文件放在项目的根目录中。只需在cookbook中应用配置即可以任何方式执行此操作。但是,如我首先解释的那样,将项目源保留在公共文件夹之外会很方便。

让我们说你有一个像这样的文件夹中的symfony项目

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

现在我们需要重命名“web”文件夹以获取此结构:

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

为此,有一个主要配置要做。首先在app / config / config.yml

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

如果您计划重命名该文件夹,则只需要执行此操作。现在让我们说这是你服务器中的文件结构。

root/
├─ www/

如果是这种情况,则必须复制“your-project”文件夹中的所有文件并粘贴到根目录中,这样www文件夹的位置就会相同。最后会像这样保持

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

正如您所看到的那样,您只能在此服务器中托管一个项目,并且您的项目旁边的文件可以与已存在于根文件夹中的其他文件混合在一起,因此,您还可以拉出www文件夹以获取此项目结构:

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

为此,您需要更改config.yml

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

还需要在www文件夹中更改app.php和app_dev.php。

//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文件夹会收到请求并调用框架。移动文件夹后再次安装和转储资产。

希望这对你有所帮助。