2014-08-31 56 views
2

我想部署一些php项目到heroku。我用具有所需依赖性的作曲家是slim frameworksimple_http_dom。我composer.json这里的内容:PHP Heroku - 调用未定义的函数mb_detect_encoding()

{ 
    "require": { 
     "slim/slim": "2.4.3", 
     "shark/simple_html_dom": "dev-master" 
    } 
} 

,当我在本地运行这个程序,它的工作就像一个魅力。

我的应用成功推向了heroku。当我尝试从浏览器访问它时发生问题。它什么也没有显示。这里是我从heroku logs命令得到的错误的一些线索。

2014-08-31T00:14:38.052441+00:00 app[web.1]: [Sun Aug 31 00:14:37.566291 2014] [proxy_fcgi:error] [pid 60:tid 140467698300672] [client 10.2.162.208:58783] AH01071: Got error 'PHP message: PHP Fatal error: Call to undefined function mb_detect_encoding() in /app/vendor/shark/simple_html_dom/simple_html_dom.php on line 1234\n', referer: http://myapp.herokuapp.com/index.php/scrap/all 
2014-08-31T00:14:38.052437+00:00 app[web.1]: 10.2.162.208 - - [31/Aug/2014:00:14:37 +0000] "POST /index.php/scrap/all/do HTTP/1.1" 500 - "http://myapp.herokuapp.com/index.php/scrap/all" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" 
2014-08-31T00:14:38.052443+00:00 app[web.1]: [31-Aug-2014 00:14:37] WARNING: [pool www] child 58 said into stderr: "NOTICE: PHP message: PHP Fatal error: Call to undefined function mb_detect_encoding() in /app/vendor/shark/simple_html_dom/simple_html_dom.php on line 1234" 

它说:

Got error 'PHP message: PHP Fatal error: Call to undefined function mb_detect_encoding() in /app/vendor/shark/simple_html_dom/simple_html_dom.php on line 1234\n', referer: http://myapp.herokuapp.com/index.php/scrap/all

这是我第一次得到这个错误。我有另一个项目使用相同的依赖关系(但没有作曲家)在heroku上运行,并且工作顺利。

我该怎么办才能解决这个问题?

+0

不是。那个问题很老,答案也是如此。它不适用了。 – dzuelke 2014-09-02 21:11:24

回答

2

的问题是mbstring扩展不是默认启用的,看https://devcenter.heroku.com/articles/php-support#extensions

只是作为一个依赖添加ext-mbstringcomposer.json所以它看起来是这样的:

{ 
    "require": { 
     "ext-mbstring": "*", 
     "slim/slim": "2.4.3", 
     "shark/simple_html_dom": "dev-master" 
    } 
} 

Heroku的也就那么汽车启用扩展当您git push

-1

看起来像另一个像我的一样的问题。 Heroku: PHP Fatal error for valid function - mb_check_encoding。我试过了,但它并没有解决我的问题。我不知道为什么。

所以,我有另一个想法如何解决这个问题(虽然这种解决方案是不好的做法,但尚未解决我的问题)。


从错误日志中,我得到这个问题是来自simple_http_dom.php线1234

$charset = mb_detect_encoding($this->root->plaintext . "ascii", $encoding_list = array("UTF-8", "CP1252")); 

因为mb_detect_encoding函数不存在发生错误。我应该做的是添加一些破解,使mb_detect_encoding只有当函数存在时调用。

该库本身是通过作曲者从https://packagist.org/packages/shark/simple_html_dom克隆的。我将源文件分发给我的github帐户,并制作了some changes。那么我更新我的composer.json以使分叉回购成为simple_http_dom的来源。

{ 
    "repositories": [{ 
     "type": "git", 
     "url": "https://github.com/libro/simple_html_dom.git" 
    }], 
    "require": { 
     "shark/simple_html_dom": "dev-master", 
     ... 
    } 
} 

这解决了我的问题。

+0

这不是正确的解决方案。您可以简单地按照Heroku文档中所述启用mbstring扩展。看到我的答案。 – dzuelke 2014-09-02 21:16:16

+0

是的,我知道,这就是为什么我早些时候说'虽然这种解决方案是不好的做法,但仍然解决我的问题。 – nvl 2014-09-03 02:35:25

+0

顺便说一句,谢谢你的答案 – nvl 2014-09-03 02:36:39

相关问题