Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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 作曲者:我应该把“音乐”放在哪里;“供应商”;文件夹?_Php_Amazon Web Services_Composer Php_Amazon Ses - Fatal编程技术网

Php 作曲者:我应该把“音乐”放在哪里;“供应商”;文件夹?

Php 作曲者:我应该把“音乐”放在哪里;“供应商”;文件夹?,php,amazon-web-services,composer-php,amazon-ses,Php,Amazon Web Services,Composer Php,Amazon Ses,我的关切与所讨论的类似。我正在使用Composer安装AmazonAWS组件以设置SES(电子邮件)服务 根据Amazon的说法,为了使用我安装的类,我需要包含autoload.php。这意味着autoload.php必须位于我的web目录(/var/www/html)中 我没有完全理解我前面提到的SO问题的答案,但它本质上说供应商目录不应该在web目录中。但是如果我这样做,我将如何需要autoload.php文件,该文件位于/vendor目录中 总的来说,我很困惑我应该如何正确地设置它。任何帮

我的关切与所讨论的类似。我正在使用Composer安装AmazonAWS组件以设置SES(电子邮件)服务

根据Amazon的说法,为了使用我安装的类,我需要包含
autoload.php
。这意味着
autoload.php
必须位于我的web目录(/var/www/html)中

我没有完全理解我前面提到的SO问题的答案,但它本质上说供应商目录不应该在web目录中。但是如果我这样做,我将如何
需要
autoload.php
文件,该文件位于/vendor目录中

总的来说,我很困惑我应该如何正确地设置它。任何帮助都将不胜感激

编辑:文章还建议将/vendor/文件夹放在web目录中。这是标准吗?我应该注意哪些安全风险?由于任何文件夹中都没有index.html文件或任何内容,因此可以自由查看和访问已安装的所有文件的目录。这肯定不是一件好事吗?

web目录是通过HTTP直接提供给任何询问正确URL的人的目录。因此,如果有人认为您的域中有一个文件夹“/foo”,而您没有采取预防措施,并且实际上存在该文件夹,并且该文件夹不包含用作目录索引的文件,任何询问的人都可能会得到该文件夹的目录列表,列出所有文件

现在,这种web托管文件夹与PHP中的
require
语句之间的区别在于,PHP不使用指向可公开访问的HTTP托管文件夹的URL,而是使用指向文件的文件系统路径

大多数初学者都会混淆这一点:因为在初学者级别的PHP都是关于在web目录中散布一堆脚本,这些脚本会发出大量HTML,其中包含指向其他脚本的链接,因此他们认为HTML中的链接和PHP中的文件路径是相同的,必须是相同的。这是错误的。它们不一定是相同的,它们是相同的,因为没有选择更好的方法

下面是如何构造现代web应用程序的。如果部署整个项目,服务器上的主目录可能被称为
/var/www/projectX
。在这个容器中有一些文件,如
/var/www/projectX/composer.json
。因此,还将有一个目录
/var/www/projectX/vendor
。此外,某个地方可能有一个正在被访问的PHP脚本(我现在延迟了它如何被访问的信息),该位置应该是A)
/var/www/projectX/script.PHP
或B)
/var/www/projectX/public/script.PHP
。这两个脚本希望使用Composer提供的类,并且需要包含自动加载

由于文件位置的原因,位置A中的脚本需要运行
require'vendor/autoload.php',位置B中的脚本需要
要求“../vendor/autoload.php”。这只是使用从脚本到自动加载文件的正确相对路径的问题。您甚至可以在这两种情况下使用绝对路径:
require'/var/www/projectX/vendor/autoload.php'也将起作用。这里的要点是:不管您如何要求autoload.php文件,只要它由脚本执行就行。路径不会影响任何内容

现在HTTP托管和访问脚本。Web服务器至少配置了一个目录,该目录作为域的主目录公开给外部世界。这称为
DOCUMENT\u ROOT
,它可以在任何地方。现在,它取决于服务器的配置,预先选择哪个目录,以及您是否可以更改该设置(通过在命令行上管理服务器,或通过单击GUI中的某些设置)

如果您的服务器将目录
/var/www/projectX
设置为文档根目录,则所有人都可以以
http://example.com/script.php
,以及案例B中的脚本作为
http://example.com/public/script.php
,以及供应商文件夹
http://example.com/vendor/...
。这不是很好,但是可以通过将
.htaccess
文件放在内部或以其他方式限制访问来避免

更好的解决方案是告诉服务器仅将目录
/var/www/projectX/public
作为文档根目录提供服务。这将阻止HTTP访问脚本A和供应商文件夹,通过
http://example.com/script.php

在这两种情况下,两个脚本都成功地包含了Composer的自动加载,因为HTTP访问的限制不适用于文件系统访问

糟糕的网站托管只允许您使用第一种方案,您唯一可以访问的目录是直接作为文档根目录的目录,而没有更改它的方法

更复杂的网站托管使用一个固定的子目录,如
public
html
webroot
作为文档根目录,允许您隐藏敏感文件,避免通过HTTP提供服务

最佳网站托管允许您选择应作为文档根托管的子目录


在任何情况下,从脚本指向Composer autoload.php的路径都不会受到任何影响。

感谢您的解释,我想我现在理解得更好了。我的web目录根在
/var/www/html/
中,因此在这种情况下,建议将
供应商
文件夹放在类似
/var/www/vendor
的位置,然后通过相对路径访问它,对吗?没错。但是请注意,通过FTP有选择地上传该文件夹,您无法将其随意放置在任何您喜欢的位置。创建该文件夹是因为您的Composer配置