Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php heroku集合文档\u根_Php_Heroku - Fatal编程技术网

Php heroku集合文档\u根

Php heroku集合文档\u根,php,heroku,Php,Heroku,如果我有这样的目录结构: / /libraries/ /other-nonpublic-stuff/ /webroot/ 如何将/webroot/设置为文档的根目录,以便在我的herokuapp的URL下仅提供其内容 我认为Procfile可能是实现这一点的方法,但它并没有真正的文档化。 已经尝试过类似的事情 web: php webroot/ 或 或 在Procfile中,但我总是以拒绝Heroku推送而告终,没有检测到支持Cedar的应用程序 当我推送根目录中带有“index.php”的

如果我有这样的目录结构:

/
/libraries/
/other-nonpublic-stuff/
/webroot/
如何将
/webroot/
设置为文档的根目录,以便在我的herokuapp的URL下仅提供其内容

我认为
Procfile
可能是实现这一点的方法,但它并没有真正的文档化。 已经尝试过类似的事情

web: php webroot/

Procfile
中,但我总是以拒绝Heroku推送而告终,没有检测到支持Cedar的应用程序

当我推送根目录中带有“index.php”的repo时,它工作正常,
heroku ps
只显示一个运行“boot.sh”的web进程,但即使这样,Procfile也明显被忽略,heroku提供“/”而不是“/webroot”。因此,对于如何设置我的
Procfile
,我并没有给出任何提示:

Process  State      Command     
-------  ---------  ----------  
web.1    up for 2h  sh boot.sh  
我通过
heroku run bash
登录到我的“实例”控制台,并执行了
cat boot.sh
。其中包括:

sed -i 's/Listen 80/Listen '$PORT'/' /app/apache/conf/httpd.conf
for var in `env|cut -f1 -d=`; do
  echo "PassEnv $var" >> /app/apache/conf/httpd.conf;
done
touch /app/apache/logs/error_log
touch /app/apache/logs/access_log
tail -F /app/apache/logs/error_log &
tail -F /app/apache/logs/access_log &
export LD_LIBRARY_PATH=/app/php/ext
export PHP_INI_SCAN_DIR=/app/www
echo "Launching apache"
exec /app/apache/bin/httpd -DNO_DETACH
因此,Heroku推送被拒绝的问题,没有检测到Cedar支持的应用程序错误(当“/”中没有.php文件时),显然可以通过将
php\u INI\u SCAN\u DIR
更改为“/app/www/webroot”来解决,但这是a)不可能的,b)无法解决使用“/webroot”作为docroot的问题。为了解决这个问题,我还必须修改“/app/apache/conf/httpd.conf”

有什么建议吗?:)

谢谢,
Josh

您需要使用mod_rewrite在Heroku上提供“webroot”的内容。在.htaccess文件中尝试以下操作:

RewriteEngine On

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /webroot/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/webroot/.*$
RewriteRule ^(.*)$ /webroot/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /webroot/index.php [NC,L]
为了避免“未检测到Cedar支持的应用程序”错误,我刚刚在存储库的根目录中创建了一个新的index.php文件。这个文件包含什么并不重要,但我添加了一些提醒,在我自己的应用程序中记录这些设置细节


希望有帮助

它实际上可以归结为创建一个自定义boot.sh并指向Procfile以在默认值上运行它。我在github上将其与一个基本结构结合在一起:


它包括一个钩子,可以使用您自己的conf文件,所以请随意使用它,并让我知道

我以为Heroku不能与php一起工作。我错了吗?他们从一段时间以来一直在默默地支持php。因为他们正在与Facebook合作。我想我可以用Procfile来实现这一点,但是没有专门针对php的文档记录其用法,甚至没有这么安静。这里说明了PHP:PHP应用程序似乎完全忽略了Procfile:-(他们也支持通用Lisp吗?在项目根目录中创建文件Procfile(无扩展名),并将这一行添加到其中。然后将该文件推送到Heroku存储库中。这个解决方案对我有效。
web: vendor/bin/heroku-php-apache2 webroot/
RewriteEngine On

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /webroot/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/webroot/.*$
RewriteRule ^(.*)$ /webroot/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /webroot/index.php [NC,L]
web: vendor/bin/heroku-php-apache2 webroot/