是否可以在PHP CLI服务器中启用CORS?

是否可以在PHP CLI服务器中启用CORS?,php,cors,Php,Cors,是否可以在中启用CORS(如果可以,如何启用) 编辑:为了处理诸如我应该只在脚本中包含标题之类的注释,请注意,我的代码中没有任何PHP文件/脚本。我只是将PHPCLI服务器用作轻量级本地托管选项。因此,理想情况下,答案将提供一个CLI选项,或者显示没有CLI选项。此功能未在内部web服务器中实现。web服务器只是用于基本测试,而不是用于生产。请注意屏幕顶部的红色框: 警告 此web服务器旨在帮助应用程序开发。它对于测试目的或在受控环境中运行的应用程序演示也很有用。它并不打算成为功能齐全的web服

是否可以在中启用CORS(如果可以,如何启用)


编辑:为了处理诸如我应该只在脚本中包含标题之类的注释,请注意,我的代码中没有任何PHP文件/脚本。我只是将PHPCLI服务器用作轻量级本地托管选项。因此,理想情况下,答案将提供一个CLI选项,或者显示没有CLI选项。

此功能未在内部web服务器中实现。web服务器只是用于基本测试,而不是用于生产。请注意屏幕顶部的红色框:

警告

此web服务器旨在帮助应用程序开发。它对于测试目的或在受控环境中运行的应用程序演示也很有用。它并不打算成为功能齐全的web服务器。它不应该在公共网络上使用


使用php routings脚本在webhook文件夹中的DocumentRoot启动服务器:

webhook/dev-routings.php:


对于那些还在为这个问题挠头的人,我也遇到了同样的问题,并且解决了。对我来说,从Webpack开发服务器代理到我的PHP开发服务器不起作用

当您使用localhost作为服务器时,PHP内置服务器似乎与CORS存在问题。相反,您应该使用本地IP地址,或者仅使用127.0.0.1,它再次指向您的本地计算机。因此,您可以这样启动服务器:

php -S 127.0.0.1:8888 -t public

现在Webpack Dev服务器代理可以工作了。您也可以使用0.0.0.0。希望这有帮助

与任何其他服务器的方式相同,因为您在脚本中发出CORS头。@Sammitch请参阅我的编辑如果您没有在该服务器上提供PHP脚本,则您在处理发送的头时没有任何选项。要启用CORS,必须发送
Access Control Allow Origin
标题。如果不能使用PHP,则无法发送标题。如果可以使用PHP,则可以发送标题。就是这样。您告诉我:
我只是将PHPCLI服务器用作轻量级本地托管选项。
。我想手册上说allI没有投反对票。是别人干的。如果文档中没有您声称的内容,我将接受一个修改后的答案,该答案说,尽管只是在等待一点时间,看看是否有人知道未记录的supportAlso,更清楚地说,你现在的回答并没有表明该功能没有实现——它可能只是表明它没有被记录在案。我对此进行了编辑。在阅读了文档顶部的红色框之后,我仍然想知道为什么您会期待这样一个功能。另外,手册通常会提到实现了什么,而不是没有实现什么。这会导致错误,因为webhook目录不存在。
<?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
}
php -S 127.0.0.1:8888 -t public