让我的PHP Slime Framework应用程序在托管环境中运行?

时间:2017-09-12 22:59:12

标签: php apache hosting web-hosting slim

简介

大家好。我目前已经完成了第一个PHP Web应用程序的开发 - 一个使用流行的PHP微框架构建的非常简单的应用程序 - Slim Framework 3

应用程序代码

我的应用程序是一个非常简单的应用程序,只是将请求的不同get路由到不同的模板化页面。我正在使用slimphp/Twig-View进行视图渲染/模板化。

index.php文件如下所示:

// Require composer autoloader
require __DIR__ . '/vendor/autoload.php';

// Application settings
$settings = require __DIR__ . '/app/settings.php';

// New Slim app instance
$app = new Slim\App( $settings );

// Add our dependencies to the container
require __DIR__ . '/app/dependencies.php';

// Require our route
require __DIR__ . '/app/routes.php';

// Run Slim
$app->run();

routes.php文件是这样的:

// Creating routes

// Psr-7 Request and Response interfaces
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;

$app->group('/', function () {

    $this->get('', function (Request $request, Response $response, $args) {

        $vars = [
            'page' => [
            'title' => 'East End Ink',
            'description' => 'Best apparel company in Austin'
            ],
        ];

        return $this->view->render($response, 'home.twig', $vars);    
    });

    $this->get('products', function (Request $request, Response $response, $args) {

        $vars = [
            'page' => [
            'title' => 'East End Ink',
            'description' => 'Best apparel company in Austin'
            ],
        ];
        return $this->view->render($response, 'products.twig', $vars);    
    });

    [...... cut out some repetition ....]

    $this->get('services', function (Request $request, Response $response, $args) {

        $vars = [
            'page' => [
            'title' => 'East End Ink',
            'description' => 'Best apparel company in Austin'
            ],
        ];
        return $this->view->render($response, 'services.twig', $vars);    
    });

});

整个应用的源代码是HERE

我如何在本地运行应用程序/尝试在生产中运行

这就是我在本地运行Web应用程序的样子:

20秒视频 - http://tinypic.com/r/n6c5g7/9

我只是运行php -S localhost:8080而在localhost:8080运行一次该应用效果很好。问题是,我不知道如何将其转换为在线运行应用程序。我已将我的源代码部署到CloudWays和FortRabbit,两者都以某种方式成功地显示了主页。

CloudWays - http://phpstack-115365-328618.cloudwaysapps.com/Homepage Shown on CloudWays

FortRabbit - https://custom-5yx3.frb.io/Homepage Shown on FortRabbit

当我尝试导航到此暂存环境中任何其他页面的路由时,我得到的错误是:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at [no address given] to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
Apache/2.4.10 (Debian) Server at phpstack-115365-328618.cloudwaysapps.com Port 80

我认为它正在做的只是提供php文件,就像php在本地提供,如果我在端口80转到应用程序的路径而不运行php -S localhost:8080

17我在本地再现相同问题的第二部视频:http://tinypic.com/r/28s6n87/9

现在的问题是:

如何在CloudWays或FortRabbit等地点托管此Web应用程序。一般来说我想做什么才能让它在那里运行?如果你很友好,我可以具体去做那件事吗?

P.S。 该网站的源代码仍然是公开的,因此请随时查看它GitHub Repo以仔细阅读文件。

P.P.S。 我非常感谢你能提供的任何帮助。我是一个n00b和这个竞技场,当我是一个比其他领域更有能力/经验丰富的PHP开发人员的时候,我会付出代价。

2 个答案:

答案 0 :(得分:1)

我从回购邮件中下载了你的文件。

首先,我在本地检查您的网站时收到以下错误:

  

解析错误:语法错误,意外'}'在第98行的/var/www/htdocs/slim/app/routes.php

那是因为第97行丢失了分号。我修正了。

然后我可以看到主页,但是尝试转到其他页面会出现500错误。

我遇到的问题是你的.htaccess文件。你有这一行:

RewriteBase /var/www/html/brand-builders-php-site/

如果我改成它:

RewriteBase /

然后一切正常(我可以加载页面)

答案 1 :(得分:1)

使用Slim 3时,通常有500个错误与htaccess有关,至少从我使用它时开始。

关于htaccess的另一个答案正确地解决了这个问题,我评论但没有足够的修复,所以我只能回答。