Я создал JSON с композитором, чтобы узнать цену монеты BRL, EUR, USD. Программа работает отлично, однако, когда я использую команду в cmd «php -S localhost: 8000 index.php», программа работает, но функция «isset ($ _ GET ['url'])» не работает в этом кейс. Например, когда я использую «localhost: 8000 / exchange», мне нужно показать ошибку: «echo json_encode (array ('status' => 'error 3'));», но появится ошибка: «echo json_encode (array ( 'status' => 'error 1')); "
Код index.php находится здесь:

<?php
/**
 * Back-end Challenge.
 *
 * PHP version 7.2
 *
 * Este será o arquivo chamado na execução dos testes automátizados.
 *
 * @category Challenge
 * @package  Back-end
 * @author   Seu Nome <seu-email@seu-provedor.com>
 * @license  http://opensource.org/licenses/MIT MIT
 * @link     https://github.com/apiki/back-end-challenge
 */

declare(strict_types=1);

header('Content-Type: application/json');

require __DIR__ . '/vendor/autoload.php';
//require_once './vendor/autoload.php';

if (isset($_GET['url'])) {
    $url = explode('/', $_GET['url']);
    //echo $url[0];
    if ($url[0] === "exchange") {

        ucfirst($url[0]);
        
        $service = 'App\Services\\'.ucfirst($url[0]).'Service';
        array_shift($url);
        if(is_numeric ($url[0])){
            $method = strtolower($_SERVER['REQUEST_METHOD']);
            try {
                $response = call_user_func(array(new $service, $method), $url);

                
                if($response == "error"){
                    http_response_code(400);
                    echo json_encode(array('status' => 'error 5'));  
                }else{
                    http_response_code(200);
                    echo json_encode(array('valorConvertido' => $response->getValor(), 'simboloMoeda' => $response->getSimbolo()));
                }
                exit;
            } catch (\Exception $e) {
                http_response_code(400);
                echo json_encode(array('status' => 'error 4', 'data' => $e->getMessage()), JSON_UNESCAPED_UNICODE);
                exit;
            }
        }else{ 
            http_response_code(400);
            echo json_encode(array('status' => 'error 3'));  
            exit;
        }
    }else{
        http_response_code(400);
        echo json_encode(array('status' => 'error 2'));  
        exit;
    }
}else{
    http_response_code(400);
    echo json_encode(array('status' => 'error 1'));  //Always appear this error
    exit;
}

Кто-нибудь может мне помочь?

php
1
Rodrigo 10 Окт 2021 в 14:19

2 ответа

Лучший ответ

Вы можете попробовать глобальную переменную $ _SERVER ['REQUEST_URI'] или возможно, проанализируйте URL-адрес, чтобы получить URL-адрес.

0
michael_ccity 10 Окт 2021 в 11:35

Чтобы заставить запросы работать в cmd, используйте это:

// проверяем, командная строка или веб

$is_website=http_response_code()!==FALSE;
if(!$is_website){
parse_str(implode('&', array_slice($argv, 1)), $_GET);
}

Пример использования запроса на получение команды терминала: cd "/ Users / fastcomputer / Google Drive / www / mybot" php myphpfile.php username = userid password = pass

0
Vitor 10 Окт 2021 в 12:22