PHP 服务挂了之后是不是就能查看. PHP 文件源码了?

2021-10-21 18:15:20 +08:00
 ysy950803

问个小白问题,有这么一个场景,假如我把.php 文件放在网站目录下,和 index.html 同目录,可通过浏览器访问的那种。 比如有一个 test.php 文件,里面有一些 PHP 代码,不渲染任何东西,当服务正常的时候,浏览器显示空白,这是正常情况。但如果 fpm 等相关服务挂掉了,是不是再访问就直接视为普通文本文件返回给浏览器了?这样就能看见源码了?

8707 次点击
所在节点    PHP
115 条回复
hxy100
2021-10-25 10:12:53 +08:00
@void1900 你甚至还可以自己修改 Apache 或者 Nginx 的源码,做一个特殊的服务器 daemon ,对于未知的 MiME Type 的类型,服务端不做任何处理,对于已知的类型,才做相对应的解析。如果你还是不能理解,你去温习一下看看 Windows 下 IIS 配置 PHP 解析又是怎么做的,逻辑上是不是根据 MIME Type 来的,看看 GUI 界面上的那几个大字跟 MIME Type 有没有什么关系。
hxy100
2021-10-25 10:34:08 +08:00
@void1900 一句话总结,MIME type 中文名叫,“文件类型,文件扩展”;并不是只有浏览器上你看到的 Content-type 才叫 MIME type ,服务端也有 MIME type 的概念,如果你不知道这个,或者不知道服务器的 Nginx/Apache 软件配置跟 MIME type 有关系,那你该补补课了,基础不扎实。
void1900
2021-10-25 15:58:02 +08:00
@hxy100 你这么硬掰真的就有点搞笑

搞来搞去都是要转发给其他服务处理,mime 真的没你说的那么高级,还看看 iis....

都是靠规则匹配文件 转发给其他服务

-----------
MIME
```媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。它在 IETF RFC 6838 中进行了定义和标准化。```

https://datatracker.ietf.org/doc/html/rfc2045
https://www.iana.org/assignments/media-types/media-types.xhtml

看看,就只是用来表示文件类型的。甚至可以和扩展名都不相关。

其实主要是给浏览器用的。

说白了他是 HTTP 协议的一部分,和你解析服务器文件没多少关系。
void1900
2021-10-25 16:01:17 +08:00
不再回复了,被拉到同一水平线击败也挺可耻的 :doge:
jindeq
2021-10-25 18:25:57 +08:00
有没有朋友鉴定一下楼上两位水平孰优孰劣?

我这个吃瓜群众就想看到别人吵架的结果。
hxy100
2021-10-25 20:47:17 +08:00
@void1900 我就问你,你平时是怎么配的 PHP ,不管是 Apache ,Nginx 还是其他的 Web 服务器,通常做法是不是把所有.php 的后缀的文件交给某个后端( etc:Nginx & php-fpm )或者某个模块处理( etc:Apache Load PHP Module ),这个过程,本身就是区别对待不同文件 MIME Type 的过程(绝大多数情况下后缀名识别是约定速成的形式,你也可以配置成不使用常规的后缀名)。回到题主本身的问题来,题主问 PHP 应用如果后端服务服务挂了,源码会不会暴露出来,我回答正确配置 MIME Type 就行,不会出现题主担心的问题。这个回答并没有毛病,你配置后端解析的时候,就是把这个 MiME Type 的文件指定一个程序去解析,张三是一个 MIME Type ,你指定张三去 3 号窗口领盒饭,它找不到 3 号窗口就会僵在那,不会发生意外之外的情况跑去 4,5 号窗口,你叫李四挂个牌子叫他张三也可以,也是一样的道理,挂牌子的过程,本身就是指定 MIME Type ,你指定的 MIME Type 解析过程如果配置有误,或者没指定,那么不管后端 php-fpm 挂不挂,题主都会发现问题。然后就会去找原因解决问题,然后就不会有如此疑问了。题主之所以有此问题,原因在于不理解服务器端是怎么识别不同类型的文件的处理逻辑,所以,回答这个问题,MIME Type 是核心,你所说的配置 php-fpm 后端解析巴拉巴拉都对,但也都是围绕 MIME Type 来的, 这个问题归根结底,在于理解 MIME Type 对于 Web 服务器的作用。苦口婆心说了这么多,希望你能听进去。
hxy100
2021-10-25 21:05:39 +08:00
@void1900 另外你说的浏览器标头里面的 Content-Type ,也是 Web 服务器告诉浏览器的,不是浏览器自己去探测的,那么 Web 服务器是怎么判断什么时候该输出 jpg 图片标头,什么时候该输出 png 标头,什么时候又该输出 html ,js 标头的呢,你考虑过这个问题没有?还有 Apache 配置文件 httpd.conf 里边一堆 AddType AddHandler 是干嘛使的呢,是不是作者脑袋抽抽了胡乱加的,“说白了他是 HTTP 协议的一部分,和你解析服务器文件没多少关系。”这是你的原话,你再好好推敲一下。
https://imgur.com/LIdAUhd
void1900
2021-10-25 23:02:30 +08:00
@hxy100

等你理解什么是 MIME 再来和我说吧小老弟。

你把.php 配置成任何类型都没有用,最终还是要去配转发,通常用规则(扩展名)。

Apache 也只是借用 mime 类型转发罢了,最终还是要转发才能避免,懂了吗?

就如你说的,php 如果配置了 mime types ,为什么访问的适合不是直接输出 php 的类型,而是 php 自由可以输出图片?因为转发给 cgi 或者其他服务之后,这个 mime 配置就无效了。

混淆了就混淆了,不懂也别装懂。

还说 `只要你 MIME type 配置正确(通常情况下以文件后缀名作为区分),无论服务怎么挂,是不会暴露源码的`,是想坑人?

你单单 MIME 配置一个 .php -> text/x-php 还是 配置个 .php -> text/plain ,还是配个 php -> application/x-httpd-php ? 再或者配个 php -> newbie/flower ?能起什么作用,浏览器打开是显示文本还是下载文件的区别罢了?

重点是要配置转发

别在这误人子弟了,真的。
void1900
2021-10-25 23:03:05 +08:00
@jindeq 哈哈哈 还不明显吗?
void1900
2021-10-25 23:07:24 +08:00
@hxy100
还说什么 `你配置后端解析的时候,就是把这个 MiME Type 的文件指定一个程序去解析` 我问你 .txt 、.jpg 、.css 、.js 给那个程序解析?……

好好再去理解理解吧,没事别把底层挂嘴上,真的懂得越多你才越知道自己肤浅,你的底层再别人眼里可能只是个笑话
hxy100
2021-10-26 01:28:19 +08:00
@void1900 你不要避重就轻,管你转发不转发,Web 服务器就是靠 MIME Type 来识别要后端解析 Code 还是输出文件的 RAW 数据。比如人类普遍凭 X 器官区分性别一样,这是不争的事实,就题主的问题而言,靠 MIME Type 识别这个究竟是 PHP 文件需要解析,还是你这位 V 站 void1900 大神直接输出,题主问题在于就是不懂这个东西,所以才来提的问题。我只是一针见血指出题主的疑惑所在,至于你扯的这些东西,浮于表面,扯了一堆有的没的,还是没说到问题根本,如果你一口咬定所谓的转发跟 MIME Type 没关系。MIME Type 跟 Web Server 没关系,建议去 Google 和 Stackoverflow 搜索相关权威内容。
我随便贴几个链接:
https://stackoverflow.com/questions/20668886/nginx-and-fastcgi-downloads-php-files-instead-of-processing-them
https://serverfault.com/questions/315224/why-are-the-php-files-downloaded-instead-of-processed-by-nginx
https://stackoverflow.com/questions/20093069/set-mime-type-after-php-interpreting
希望你不要对既定事实视而不见,不服的话请去怼老外。

这是我最后一次回复,跟掩耳盗铃的人较真真的很累。
void1900
2021-10-26 08:33:39 +08:00
@hxy100 哈哈哈哈 算了算了,年轻人 你就继续怎么呆下去吧。

mime 就只是一个文件类型标识,不是你所谓的后端解析

我说的是和 php 文件的处理没有关系,不是和 web server 没有关系,年轻人语文也不行,唉。

还管你转不转发,还权威内容,nginx php 需要配置 mime types ?不配 mime types 一样能处理。

但是你不配 fastcgi_pass 试试?

apache 配置 php 方法有几种,说直白点就是 apache 把你误导了,懂了吧,你自己再学习学习吧。

apache 你单单配置 addtype 有用?


还 一针见血 哈哈哈哈哈哈哈哈哈

你这个一针见血怕是扎针到别人飚血了

你找多几个人问问吧 真的
ysc3839
2021-10-26 10:01:48 +08:00
@hxy100
> Web 服务器就是靠 MIME Type 来识别要后端解析 Code 还是输出文件的 RAW 数据

这句话可以很轻易地证伪。使用 Unix shell 配合 FIFO 和 netcat 可以实现一个很简单的 Web 服务器,比如这个例子 https://www.linuxquestions.org/questions/linux-newbie-8/how-to-write-a-http-server-using-bash-script-644921/#post3180848
其中就不涉及到 MIME type ,而是直接根据文件名后缀选择处理流程。

你可以说某个 Web 服务器的内部处理逻辑用到了 MIME type ,但绝对不是所有 Web 服务器的处理逻辑都涉及 MIME type 。
void1900
2021-10-26 10:51:47 +08:00
@hxy100 看看吧,来了个明白人了
hxy100
2021-10-26 14:09:01 +08:00
@ysc3839 你没完整看完我的回答,另外你也不懂,后缀名也是识别 MIME Type 的方式之一,谁说后缀名跟 MIME Type 没关系的,计算机判断一个文件是什么文件,通常有两种方式,其一是通过后缀名粗暴判断(绝大多数的情况),其二是根据一些常见的已知的文件类型的二进制数据流头几个字节来判断(专业术语叫:File Magic Number )。
hxy100
2021-10-26 15:04:33 +08:00
@void1900

“mime 就只是一个文件类型标识,不是你所谓的后端解析”
——是你语文不行,我的意思就是,MIME Type 用以 Web Server 识别同一类文件,Web 服务就是把这写不同 Type 的文件区分来用不种方式处理的,该输出还是该后端解析,后缀名属于确认 MIME Type 的一种极其常见方式。

“我说的是和 php 文件的处理没有关系,不是和 web server 没有关系,年轻人语文也不行,唉。”
——题主的疑问爆不爆源码跟 php 本身没关系,跟 WebServer 配置有关系。

“还管你转不转发,还权威内容,nginx php 需要配置 mime types ?不配 mime types 一样能处理。”
——Nginx 本身内置了 mime type ,但是默认定义的都是用于处理静态文件,但你配置 proxy_pass 是通常要指定的 location ~ *.php {...},你只要用了后缀名做区分,本质上也是用了 MIME Type ,别以为后缀名就不是 MIME Type 了

“apache 配置 php 方法有几种,说直白点就是 apache 把你误导了,懂了吧,你自己再学习学习吧。”
——不管几种,而且不管哪一种,内部逻辑都需要 MIME Type 把不同的文件区分归类,然后做不同的处理

“apache 你单单配置 addtype 有用?”
——这是你说的,我没说
void1900
2021-10-26 15:23:19 +08:00
@hxy100

哈哈哈 好一个用到 扩展名就是 mime 哈哈哈哈哈哈哈哈

谁能叫醒他 ,

我 nginx 可以不加 mime types 一样解析 php ,apache 可以不加 AddType 一样解析 php ,这是 mime ?哈哈哈

我 mime 配置 .php -> newbie/flower 一样可以解析 哈哈哈

mime 是 http 协议的一部分,扩展名是啥,mime 的第三个 M 是啥? Mail !还在这硬扯 webserver 。

还内部逻辑 ...
hxy100
2021-10-26 15:40:37 +08:00
@void1900 我当然知道 MIME Type 的全程是啥,你可以不叫它 MIME Type ,你可以不用这个名称,直接就叫“文件类型”即可,但是和 MIME Type 就是一个意思,服务器端都要靠文件类型来区别对待不同的文件。如果你非要狭义认为只有静态资源才配有 MIME Type ,或者 MIME Type 一定要用在浏览器上才叫 MIME Type ,那好,你赢了,我认输。可能你真的认定叫一个人的名字是专人专用,小名和大名也不能混,二狗和王二狗不是同一个人吧。你赢了,你是对的,我不用 MIME Type 这个名字了,让给你,暂且叫它 V2EX Type 吧!
void1900
2021-10-26 15:44:21 +08:00
@hxy100

混淆了就混淆了,不丢脸,世界还很大,这和叫啥没有关系

mime 配置就单单是 扩展名 对应 mime types ,不能说配了 mime 就可以了,重点是要转发给其他服务处理。

别犟,也别杠
ysc3839
2021-10-26 16:53:27 +08:00
@hxy100 我看了。你一边强行把 MIME Type 和文件后缀名绑定成一个概念,另一边又毫无依据地强调“Web 服务器就是靠 MIME Type 来识别”。

按照我的理解,MIME Type 和文件后缀名以及文件内容没有强关联。HTTP 使用 MIME Type 也正是因为文件后缀名和文件内容没有必然联系,所以引入了 MIME Type 来让服务器告诉浏览器,应该把数据当作什么文件类型来处理,不然按照后缀名去推测的话,PHP 这种脚本语言该对应什么类型?没有后缀的文件名该怎么处理?
本来 MIME Type 的概念就只是在几个互联网协议中使用的,根本没有被各种软件、系统广泛使用,硬要把 MIME Type 和文件后缀名绑定在一起是站不住脚的。

对于你说的“看看 Windows 下 IIS 配置 PHP 解析又是怎么做的”,请你去看看微软官方的文档 https://docs.microsoft.com/en-us/iis/application-frameworks/scenario-build-a-php-website-on-iis/configuring-step-1-install-iis-and-php 里面是怎么写的:
11. In Request path, type *.php.
再看看 PHP 官方的文档 https://www.php.net/manual/en/install.windows.manual.php:
[name='PHP_via_FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='%phppath%\php-cgi.exe',resourceType='Unspecified']

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/809602

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX