sendFile скачивает файл, при расширении файла "php"

Пытаюсь открыть клиенту при подключении к серверу файл с интерфейсом. При расширении файла HTML - страница открывается и все хорошо, но, если поставить файлу расширение .php, то файл просто загружается на носитель клиента. Попытался скачать php-express, но проблему это не решило.


Вот код:

    var express = require('express');
var app = express();
var phpExpress = require('php-express')({
    // assumes php is in your PATH
    binPath: 'php'
});

// set view engine to php-express
app.set('views', './views');
app.engine('php', phpExpress.engine);
app.set('view engine', 'php');

// routing all .php file to php-express
app.all(/.+\.php$/, phpExpress.router);

var server = app.listen(3000, function () {
    var host = "localhost"//server.address().address;
    console.log(host);
    var port = server.address().port;
    console.log(port);
    console.log('PHPExpress app listening at http://%s:%s', host, port);
});
var io = require('socket.io').listen(server);
//var server = require('http').createServer(app);

//server.listen(3000);

app.get('/', function (request, response) {
    response.sendFile(__dirname + '/index.php');
});

Ответы (1 шт):

Автор решения: Давид Манжула

У вас в последних строчках явно задано: если пользователь обратится по адресу / - прочитай с диска файл index.php и отдай ему:

app.get('/', function (request, response) {
    response.sendFile(__dirname + '/index.php');
});

Этот код нужно удалить.


В строке app.set('views', './views') вы задаете движку папку, где должны лежать файлы которые будут отображатся. И именно там php-express будет искать .php-файлы.

Таким образом, нужно переместить php-файлы в папку ./views (хотя, если в этой папке будут только php-файлы, советую пеерименовать папку на что-то соответствующее).


Тогда остается одна проблема: движок отзывается только по адресам ....php, если перейти по адресу localhost:3000/ - в адресе нету .php и express не передаст запрос php.

Поэтому я добавил строчку app.all('/', phpExpress.router) - она добавляет соответствующий адрес на управление php-express.


В итоге, получился вот такой код:

var express = require('express');
var app = express();
var phpExpress = require('php-express')({
  // assumes php is in your PATH
  binPath: 'php'
});

// set view engine to php-express
app.set('views', './views');
app.engine('php', phpExpress.engine);
app.set('view engine', 'php');

// routing all .php file to php-express
app.all(/.+\.php$/, phpExpress.router);
app.all('/', phpExpress.router);

var server = app.listen(3000, function () {
  var host = "localhost"//server.address().address;
  console.log(host);
  var port = server.address().port;
  console.log(port);
  console.log('PHPExpress app listening at http://%s:%s', host, port);
});
var io = require('socket.io').listen(server);
→ Ссылка