当前位置:首页 > 探索

PHP是脚本语言不能通过浏览器运行

PHP文件扔到浏览器地址栏里,本语敲下回车,言不运行浏览器显示一堆源码或者直接下载文件——这个场景我见过太多次了。过浏每次同事喊“为什么我的览器PHP打不开”,我过去一看,本语他正用file://协议访问本地文件。言不运行

PHP是过浏脚本语言,这句话本身没错。览器但“不能通过浏览器运行”这个说法,本语得掰开揉碎了讲。言不运行浏览器能直接执行的过浏只有HTML、CSS、览器JavaScript,本语这是言不运行它的“母语”。而PHP代码需要经过服务器端的过浏解释器处理,把执行结果——通常是HTML——返回给浏览器。你让浏览器直接去读一个.php文件,它看到的是一堆未处理的原始代码,就像把菜谱直接端上桌,顾客没法吃。

打个比方吧。你去餐厅点菜,厨师在厨房里炒菜,服务员把成品端给你。PHP就是那个厨师,浏览器是顾客。你非要闯进厨房,对着生肉和调料大喊“我要吃这道菜”,那只能看到原料堆在案板上。你得通过服务员——也就是Web服务器——去下单。Apache或Nginx就是那个服务员,它把请求转给PHP解释器,等它“炒”完,再端出来。

我遇到过最典型的案例是:一个新手把PHP文件放在桌面,双击用浏览器打开,结果屏幕显示hello。他以为代码写错了,反复检查语法,甚至重装了PHP环境。问题根本不在代码,在于他跳过了服务器这一层。后来我帮他在htdocs目录下建了个文件夹,把文件放进去,通过localhost访问,三秒钟就看到了“hello”。他恍然大悟的表情,我到现在还记得。

所以严格来说,不是“PHP不能通过浏览器运行”,而是“PHP不能像HTML那样被浏览器直接解析”。它必须运行在服务器环境下——本地用XAMPP、WAMP、MAMP,线上用LAMP、LNMP,都行。只要配置好Apache或Nginx,让它们知道.php后缀的文件要交给PHP模块处理,一切就通了。

有人会问,那JavaScript不也是脚本语言吗?怎么就能直接在浏览器跑?因为JavaScript的解释器内嵌在浏览器里,而PHP的解释器是个独立的进程,通常以模块或CGI方式挂在服务器上。这是两种完全不同的运行模型。JS是客户端脚本,PHP是服务端脚本。一个在前台发传单,一个在后台炒菜,工种不同。

再补一刀:就算你用命令行php file.php跑,输出结果也是纯文本,浏览器照样不认。你得用php -S localhost:8000起个内置服务器,或者干脆交给Apache。很多初学者被“脚本语言”这个词误导,以为跟Python、Perl一样,直接解释执行就行。但PHP的设计初衷就是为Web而生,它的生命周期从HTTP请求开始,到响应结束,脱离服务器环境,它就是个“半残废”。

最后说个实际建议:如果你要测PHP代码,别双击文件,别拖进浏览器。装个集成环境,把文件放到指定目录,用http://localhost/xxx.php访问。如果看到源码,先检查服务器是否启动,再检查文件路径是不是在Web根目录下。90%的“PHP打不开”都是这两个原因。剩下10%?可能是你忘了在代码末尾加?>,但那又是另一回事了。

分享到: