浏览器自动下载PHP文件

3
我正在阅读《Node.js for PHP Developers》一书。我已经创建了一个NodeJS Web服务器,它能够接收请求并进行响应。但是,每当我访问一个PHP文件并将其重定向到JS文件(这是必须的),我的浏览器会自动下载PHP文件。

以下是我的JS代码,按照该代码,当我访问localhost:1337/first.njs时,它也会下载JS文件。
var http = require('http');
var url = require('url');
var file = require('./first.njs');

http.createServer(function(req, res) {
if(url.parse(req.url).pathname == 'first.php')
    file.serve(req, res);
else
    res.end('The file doesn\'t exist');
}).listen(1337, '127.0.0.1');

console.log('Server is running on 1337');

如果相关的话,这是我的PHP文件
<?php
  echo "ASD";
?>

我知道这看起来像个非常愚蠢的问题,但我无法弄清楚为什么会发生这种情况。
测试浏览器:Chrome和Firefox。 更新 无法确定确切的问题,也无法复制该问题 - 但如果有人想将请求的PHP文件重定向到JS文件并提供它(JS文件),这是我的最新代码。
var http = require('http');
var url = require('url');
var file = require('./first.njs');

http.createServer(function(req, res) {
if(url.parse(req.url).pathname == '/first.php')
    file.serve(req, res);
else
    res.end('File not found');
}).listen(1337, '127.0.0.1');

console.log('Server is running on 1337');

如果直接访问 PHP 文件,你会得到什么? - Charlotte Dunois
您没有安装PHP。 - Nicolas
@Nicolas 如果没有安装Apache,就意味着没有Web服务器,这意味着甚至无法获取任何东西(甚至无法下载文件)。 - Charlotte Dunois
@CharlotteDunois 我的 PHP 代码 - Abdussami Tayyab
您没有安装PHP或未激活Apache模块。 - Charlotte Dunois
@Nicolas 但是我有一个用NodeJS编写的Web服务器,它监听请求并返回响应。我的请求是localhost:1337/first.php,它不应该将PHP文件作为服务,因为我只是通过代码读取URL名称,然后提供另一个文件。问题是,为什么它会下载文件? - Abdussami Tayyab
3个回答

2
如果您想检查一个PHP页面是否可以在不实际呈现到页面的情况下进行渲染,您可以在JavaScript/jQuery中使用Ajax请求。
    $.ajax({
        type: "POST",
        url: 'YOUR PHP FILE PATH',
        success: function (dataCheck) {
            // file was accessed
        }
    });

在你的成功函数中,你可以输出PHP文件已经成功访问。


我有一个Web服务器(WAMP和XAMPP都有),并且是一名PHP Web开发人员,我只想获取URL名称,无论它是什么,我不想通过提供PHP文件来响应。我只想让服务器在我使用“localhost:1337/first.php”发送请求时打印“/first.php”。 - Abdussami Tayyab
我不太确定你想要发生什么。请详细解释一下你想要做什么。 - Nicolas
好的。我不想提供一个文件。我只需要访问该文件的路径。比如,如果我访问first.php,它必须回应一个字符串“你访问了first.php”。这是不可能的吗? - Abdussami Tayyab
哦,我明白你的意思了。那么,在jQuery中使用ajax请求,如果访问了PHP页面,则会响应并打印出它所访问的URL,怎么样? - Nicolas
嗯,看起来不错。谢谢。 - Abdussami Tayyab

1

一旦您更好地掌握了Node,您可能希望使用Expressjs,请查看 Expressjs路由

app.get('/first.php', function(req, res){
    res.send('You accessed first.php!');
});

如果您想在node.js中显示php,则可以使用php-node来呈现php。

我不想渲染 PHP 文件。我希望发生这种情况 -> 我不想提供文件,只想获取访问的文件路径。比如,如果我访问 first.php,它必须响应一个字符串“你访问了 first.php”。这不可能吗? - Abdussami Tayyab
@AbdussamiTayyab 哦,我想你正在寻找路由 - Luke Willis
哦,看看这个更新,哈哈永远不要忘记分号、括号和正斜杠。 - Abdussami Tayyab
是的,谢谢你的支持。实际上我正在尝试学习NodeJS,因为当我学习ExpressJS时,只是照着代码复制粘贴而已。 - Abdussami Tayyab
1
@AbdussamiTayyab 没问题。我也做了同样的事情。 - Luke Willis

0

看起来你没有配置Apache(或其他服务器)或PHP。请求必须先经过PHP脚本。所以你需要访问localhost:80/file.php,然后在PHP脚本中重定向到localhost:1337/file.js。

更好的建议是从Apache反向代理到Node.js,然后让Node.js读取路径。


请参考@Nicholas答案中的评论。这本书做到了,它起作用了,它描述了他的代码是如何工作的。我的不起作用。 - Abdussami Tayyab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接