是否可以在PHP CLI server中启用CORS(如果是,如何)?
编辑:为了解决诸如我应该在我的脚本中包含标题的注释,请注意我的代码中没有任何PHP文件/脚本。我只是使用PHP CLI服务器作为轻量级本地托管选项。因此,理想情况下,答案将提供CLI选项,或显示没有。
答案 0 :(得分:2)
此功能未在内部Web服务器中实现。 Web服务器仅用于基本测试,而不用于生产。请注意documentation:
顶部的红色框警告强>
此Web服务器旨在帮助应用程序开发。它也可用于测试目的或在受控环境中运行的应用程序演示。它不是一个功能齐全的Web服务器。它不应该在公共网络上使用。
答案 1 :(得分:2)
使用php routings脚本在webhook文件夹中使用DocumentRoot启动服务器:
php -S localhost:8888 -t webhook webhook/dev-routings.php
webhook / dev-routings.php:
<?php
// Copyright Monwoo 2017, service@monwoo.com
// Enabling CORS in bultin dev to test locally with multiples servers
// used to replace lack of .htaccess support inside php builting webserver.
// call with :
// php -S localhost:8888 -t webhook webhook/dev-routings.php
$CORS_ORIGIN_ALLOWED = "http://localhost:3000";
function consoleLog($level, $msg) {
file_put_contents("php://stdout", "[" . $level . "] " . $msg . "\n");
}
function applyCorsHeaders() {
global $CORS_ORIGIN_ALLOWED;
header("Access-Control-Allow-Origin: {$CORS_ORIGIN_ALLOWED}");
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Accept');
}
if (preg_match('/\.(?:png|jpg|jpeg|gif|csv)$/', $_SERVER["REQUEST_URI"])) {
consoleLog('info', "Transparent routing for : " . $_SERVER["REQUEST_URI"]);
return false;
} else if (preg_match('/^.*$/i', $_SERVER["REQUEST_URI"])) {
$filePath = "{$_SERVER['DOCUMENT_ROOT']}/{$_SERVER["REQUEST_URI"]}";
applyCorsHeaders();
if (!file_exists($filePath)) {
consoleLog('info', "File not found Error for : " . $_SERVER["REQUEST_URI"]);
// return false;
http_response_code(404);
echo "File not Found : {$filePath}";
return true;
}
$mime = mime_content_type($filePath);
// https://stackoverflow.com/questions/45179337/mime-content-type-returning-text-plain-for-css-and-js-files-only
// https://stackoverflow.com/questions/7236191/how-to-create-a-custom-magic-file-database
// Otherwise, you can use custom rules :
$customMappings = [
'js' => 'text/javascript', //'application/javascript',
'css' => 'text/css',
];
$ext = pathinfo($filePath, PATHINFO_EXTENSION);
// consoleLog('Debug', $ext);
if (array_key_exists($ext, $customMappings)) {
$mime = $customMappings[$ext];
}
consoleLog('info', "CORS {$CORS_ALLOWED} added to file {$mime} : {$filePath}");
header("Content-type: {$mime}");
echo file_get_contents($filePath);
return true;
} else {
consoleLog('info', "Not catched by routing, Transparent serving for : "
. $_SERVER["REQUEST_URI"]);
return false; // Let php bultin server serve
}
答案 2 :(得分:0)
对于你们中那些仍在挠头的人,我也遇到了同样的问题并想出了办法。对我来说,从Webpack开发服务器到我的PHP开发服务器的代理不起作用。
当您将localhost用于服务器时,似乎内置的PHP服务器的CORS出现了问题。相反,您应该使用本地IP地址,或者仅使用127.0.0.1,它再次指向本地计算机。因此,您将像这样启动服务器:
php -S 127.0.0.1:8888 -t public
现在,Webpack Dev Server代理可以工作。您也可以使用0.0.0.0。希望这可以帮助。