我刚刚开始学习 PHP、MySql 以及它与前端开发的关系。在学习过程中,我发现除非 PHP 文件位于 /var/www/html 目录中,否则我无法执行它。我从 askubuntu 等多个来源找到了这个解决方案,但始终找不到原因。那么,这是否意味着 PHP 文件必须始终位于这个特定目录中?我可以做些什么来使 PHP 文件(例如,我的 Documents 文件夹)成功运行,而不是被 Mozilla 标记为“保存”?请帮忙。
答案1
因为没有这样配置,所以默认情况下 Apache 将仅为/var/www/html
目录内的 php 文件提供服务。
您可以将 Apache 设置为查看系统内任何位置的内容,为了实现这样的事情,您需要更改 Apache 设置,它们大多位于/etc/apache2
。
请注意,这仅适用于 Ubuntu 14.04 LTS 及更新版本。
在我的 Ubuntu 14.04 LTS 中,文档根目录设置为
/var/www/html
。它在以下文件中配置:/etc/apache2/sites-available/000-default.conf
所以只要做一个
sudo nano /etc/apache2/sites-available/000-default.conf
并将以下行更改为您想要的内容:
DocumentRoot /var/www/html
也做一个
sudo nano /etc/apache2/apache2.conf
并找到这个
<Directory /var/www/html/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
并更改
/var/www/html
为您的首选目录并保存。
保存更改后,只需重新启动 apache2 网络服务器即可完成:)
sudo service apache2 restart
如果您更喜欢图形文本编辑器,那么您可以用sudo nano
替换gksu gedit
。
答案2
php 文件无法在文档根目录之外打开的原因是安全. Web 服务器总是局限于某个文件夹及其子文件夹。
您可以设置 apache 查看几个不同的文件夹,具体取决于 url、喜欢http://localhost
或http://someother.localhost
指向不同的文件夹。
为此,首先您需要编辑 000-defailt.conf,更改如下:
ServerName localhost
ServerAlias localhost
然后将 000-default.conf 复制到 001-someother.conf 并进行如下编辑:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/leonid/Web/SomeotherRoot
ServerName someother.localhost
ServerAlias someother.localhost
<Directory "/home/leonid/Web/SomeotherRoot">
AllowOverride All
Require local
# ^ this will limit connections to only local
</Directory>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
LogLevel error
</VirtualHost>
之后你需要让someother.localhost解析为服务器ip,编辑/etc/hosts:
127.0.0.1 localhost *.localhost
...other lines
最后,您需要通过以下方式启用新的配置文件:
sudo a2ensite 001-someother.conf
sudo systemctl reload apache2
注意:以上示例仅适用于本地站点,只能在本地访问。
我编写了脚本,只需单击几下即可创建此类配置,但最好在使用脚本之前先了解其操作方式。Github。