0

我想在不关闭原始设计的情况下测试我的项目的新设计。我将整个源目录复制到新目录。我准备了如下子域和目录名称(这是共享主机):

<pre>
    http://project.mydomain.com/
    /public/user1/project/

    http://project1.mydomain.com
    /public/user1/project1/
</pre>

我在本地主机(Windows、Apache2.4、php 5.6)上所做的相同。刚刚将“1”添加到新目录名称并复制源目录的所有内容。在本地主机上,两个“站点”都可以解决任何问题。

但是在我尝试使用重定向控制插件之前,在共享主机上重复的站点工作正常。结果我只看到空白页。它发生在我所有的 14 个模块和我使用的任何路线中。

一个示例调用:

<pre>
    public function fakeAction() 
    {        
        if ( $this->getRequest()->isPost() ) 
        {
            return $this->redirect()->toRoute('main');
        }

        return $this->redirect()->toRoute('login');        
    }

</pre>

,其中路由'main'配置为:

<pre>
    return [
        'router' => [
            'routes' => [

                'main' => [
                    'type' => Literal::class,
                    'options' => [
                        'route' => '/',
                        'defaults' => [
                            'controller' => Controller\MainController::class,
                            'action' => 'index'
                        ]
                    ]
                ],
</pre>

其他几个事实:

  • 我没有使用事件(如 MvcEvent::EVENT_DISPATCH 或任何其他事件)
  • 我在 Application 模块中只有一个 onBootsrtap() 方法(其他 13 个模块只不过是 Module.php 中的 getConfig() ):

        
        公共函数 onBootstrap ( MvcEvent $event )
        {
            $application = $event->getApplication();
            $serviceManager = $application->getServiceManager();
            $sessionManager = $serviceManager->get(SessionManager::class);
            $sessionManager->start();
        }
    
  • $this->redirect()->toRoute('main') 返回(恕我直言)正确的对象:

        Zend\Http\PhpEnvironment\Response 对象
        (
            [版本:受保护] =>
            [内容发送:受保护] =>
            [recommendedReasonPhrases:protected] => 数组
                (
                    [100] => 继续
                    [101] => 切换协议
                    [102] => 处理
                    [200] => 好的
                    [201] => 已创建
                    [202] => 接受
                    [203] => 非权威信息
                    [204] => 没有内容
                    [205] => 重置内容
                    [206] => 部分内容
                    [207] => 多状态
                    [208] => 已报告
                    [226] => 已使用即时消息
                    [300] => 多项选择
                    [301] => 永久移动
                    [302] => 找到
                    [303] => 查看其他
                    [304] => 未修改
                    [305] => 使用代理
                    [306] => 切换代理
                    [307] => 临时重定向
                    [308] => 永久重定向
                    [400] => 错误请求
                    [401] => 未经授权
                    [402] => 需要付款
                    [403] => 禁止
                    [404] => 未找到
                    [405] => 方法不允许
                    [406] => 不可接受
                    [407] => 需要代理身份验证
                    [408] => 请求超时
                    [409] => 冲突
                    [410] => 走了
                    [411] => 需要长度
                    [412] => 前提条件失败
                    [413] => 请求实体太大
                    [414] => 请求 URI 太长
                    [415] => 不支持的媒体类型
                    [416] => 请求的范围不可满足
                    [417] => 预期失败
                    [418] => 我是一个茶壶
                    [422] => 无法处理的实体
                    [423] => 锁定
                    [424] => 依赖失败
                    [425] => 无序集合
                    [426] => 需要升级
                    [428] => 需要先决条件
                    [429] => 请求过多
                    [431] => 请求标头字段太大
                    [444] => 连接关闭而没有响应
                    [451] => 因法律原因不可用
                    [499] => 客户端关闭请求
                    [500] => 内部服务器错误
                    [501] => 未实施
                    [502] => 网关错误
                    [503] => 服务不可用
                    [504] => 网关超时
                    [505] => 不支持 HTTP 版本
                    [506] => 变体也协商
                    [507] => 存储空间不足
                    [508] => 检测到环路
                    [510] => 未扩展
                    [511] => 需要网络身份验证
                    [599] => 网络连接超时错误
                )
            [状态代码:受保护] => 302
            [原因短语:受保护] =>
            [headers:protected] => Zend\Http\Headers 对象
                (
                    [pluginClassLoader:protected] =>
                    [headersKeys:protected] => 数组
                        (
                            [0] => 位置
                        )
    
    
                [headers:protected] => Array
                    (
                        [0] => Array
                            (
                                [name] => Location
                                [line] => Location: /
                            )
    
                    )
    
            )
        [metadata:protected] => Array
            (
            )
        [content:protected] => 
    ) 
    
  • 浏览器中的地址还是一样的。

  • 浏览器开发工具显示浏览器没有重定向到任何地方(网络选项卡上没有新条目),
  • 浏览器没有收到新的传入数据。
  • 提供者共享的 Apache error.log 没有任何条目
  • Apache access.log 显示

        2018 年 3 月 5 日:13:43:51 +0100    
        xxx.xx.xx.xxx
        获取 /favicon.ico HTTP/1.0
        状态:200 318 B
    
    
    05/Mar/2018:13:43:49 +0100
    xxx.xx.xx.xxx   
    POST /open HTTP/1.0
    Status: 200 23 B
    

也许这是线索:可以吗,该服务器在 POST 之后发送 /favicon.ico 吗?但为什么?我作为fakeAction() Zend\Http\PhpEnvironment\Response 对象而不是 ViewModel 的结果返回。

  • 我正在捕获所有异常、错误和严格通知,但在这种情况下 - Apache/php/framework 不会触发其中任何一个。

  • 最后一次测试:如果在复制过程中某些文件被损坏,我只是将工作版本的目录从“项目”重命名为“项目1”,效果是一样的——重定向不起作用。

更新 1

  • 我删除了供应商目录并通过作曲家再次获取它。
  • 缓存清晰(我没有使用缓存,zend 框架一直处于开发阶段)

最终更新!

我发现发生了什么。正如我在我的一个答案中所写,我composer通过 Zend Studio 界面使用。今天打开 Zend Studio 控制台,仔细查看了控制台日志。每次我使用命令更新/安装依赖 composer项时都使用自己的缓存(不是在线存储库),它复制了模块 zend-developer-tool 但(出于未知原因)模块的一个文件在本地硬盘的作曲家缓存中损坏。在我删除作曲家缓存并再次运行更新/安装依赖项后,所有工作都应如此。谢谢大家的努力。

4

1 回答 1

0

最后,我追踪了问题的根源。现在我不清楚“为什么”,但问题与模块有关zendframework/zend-developer-tools。为什么我确定这个模块失败了?我不是。但也许这可以帮助有类似情况的人。

在无能为力的情况下,我删除了整个“require-dev”部分并重新生成了配置文件(composer update),问题就消失了!这是部分:

"require-dev" : {
    "zendframework/zend-developer-tools" : "^1.1",
    "zendframework/zend-debug" : "^2.5",
    "san/san-session-toolbar" : "^1.0",
    "zfcampus/zf-development-mode" : "^3.1"
},

我想,也许@edigu 是对的,问题在于自动生成的文件,这只是巧合。我必须知道它以备将来使用 - 哪个模块(如果有)是我的问题的原因。回滚到“损坏的版本”后,我开始从本节中一一卸载模块(当然我总是重新生成文件)。效果是一样的——问题仍然存在。只有当我删除zend-developer-tools所有工作正常...

当然,如果我zend-developers-tool在源项目中删除然后将其复制到新目录 - 从一开始一切正常。

正如我在上面所写的 - 我还不知道“为什么”。但这是可重复的。每次我复制原始项目时 - 我在删除此模块后出现重定向问题......


最终更新!

我发现发生了什么。正如我在我的一个答案中所写,我composer通过 Zend Studio 界面使用。今天打开 Zend Studio 控制台,仔细查看了控制台日志。每次我使用命令更新/安装依赖 composer项时都使用自己的缓存(不是在线存储库),它复制了模块 zend-developer-tool 但(出于未知原因)模块的一个文件在本地硬盘上的作曲家缓存中损坏。在我删除作曲家缓存并再次运行更新/安装依赖项后,所有工作都应如此。谢谢大家的努力。

于 2018-03-06T09:50:17.187 回答