Proste REST API w php

0

Przygotowałem skrypt w PHP wedle tego kursu:
https://www.leaseweb.com/labs/2015/10/creating-a-simple-rest-api-in-php/
Chciałbym stworzyć proste REST API do pobierania rekordów z bazy danych.
To co stworzyłem chciałem przetestować na tej stronie:
https://resttesttest.com/
jednak występuje błąd: załącznik
Strona odpowiada (także w przeglądarce): załącznik

Skrypt w PHP:

<?php

	require_once "connect.php";

	$connect = @new mysqli($host, $db_user, $db_password, $db_name);
	
	if ($connect->connect_errno!=0)
	{
		echo "Error: ".$connect->connect_errno;
	}
	else
	{
		$sql = "select * from nutrients";
		
		$result = mysqli_query($connect,$sql);
		
		if (!$result) {
		  http_response_code(404);
		  die(mysqli_error());
		}
		
		for ($i=0;$i<mysqli_num_rows($result);$i++) {
		    echo ($i>0?',':'').json_encode(mysqli_fetch_object($result));
		}
    	}
		
    	$connect->close();

?>

Co mogę zrobić by ta strona dostała poprawną odpowiedź? Żeby dostała to co zwraca skrypt PHP w formie JSON?

0
  1. nie złącznik tylko załącznik
  2. a sprawdzałeś czy się w ogóle łączy z bazą i pobiera rekordy
0

1 Poprawione
2 Sprawdzałem rekordy są pobierane i wyświetlane w każdym razie przeglądarce gdy wejdę pod odpowiedni URL. Jenak stron restesttest.com nie widzi mojego skryptu/API.
Czy powinienem w jakiś sposób zmienić konfiguracje serwera? API uskuteczniałem wedle tego tutoriala.
https://www.leaseweb.com/labs/2015/10/creating-a-simple-rest-api-in-php/

0

czy próbowałeś już tego kodu?

header("Access-Control-Allow-Origin: *");
0

Dodałem te linijkę do mojego sktypru w phpie niestety to nie pomogło.

<?php
    header("Access-Control-Allow-Origin: *");
	require_once "connect.php";

	$connect = @new mysqli($host, $db_user, $db_password, $db_name);
	
	if ($connect->connect_errno!=0)
	{
		echo "Error: ".$connect->connect_errno;
	}
	else
	{
		$sql = "select * from nutrients";
		
		$result = mysqli_query($connect,$sql);
		
		if (!$result) {
		  http_response_code(404);
		  die(mysqli_error());
		}
		
		for ($i=0;$i<mysqli_num_rows($result);$i++) {
		    echo ($i>0?',':'').json_encode(mysqli_fetch_object($result));
		}
    	}
		
    	$connect->close();

?>

Strona https://resttesttest.com/ dalej nie widzi mojego restAPI

0

U mnie działa :)
Na c9.io utworzyłem nowy project "php", dodałem do pliku hello-world.php

<?php

$a = [];
if(isset($_GET["cors"])) {
    header("Access-Control-Allow-Origin: *");
    $a[] = 'cors access enabled';
} else {
    $a[] = 'cors access disabled';
}

$a[] = headers_list();
$a[] = date(DATE_RFC822);

var_dump($a);

?>

testuję na https://resttesttest.com/ adresy
https://php-marek2.c9users.io/hello-world.php failuje, nagłówek "Access-Control-Allow-Origin" nie jest wysyłany
https://php-marek2.c9users.io/hello-world.php?cors działa poprawnie

0

A u mnie nie :) haha
Sam zobacz, zrobiłem zrzuta ekranu z twoim działającym adresem, który nie działa oraz mało tego wrzuciłem na mój hosting twój skrypt i dalej nie bangla.
Gdy wpisze adres: mójhosting?cors to mam:

array(3) { [0]=> string(19) "cors access enabled" [1]=> array(1) { [0]=> string(30) "Access-Control-Allow-Origin: *" } [2]=> string(29) "Sat, 29 Apr 17 17:59:49 +0200" }

ale resttesttest dalej się upiera, naprawdę. Jeżeli Tobie to działa to czy mógłbym prosić o zrzut ekranu (taki ze mnie Tomasz :) ) bo mi ani wte, ani wewte.

0

Wyłączyłem serwer dlatego nie działała strona, obecnie jest włączony,
dodałem wyświetlanie $_SERVER do pliku php, poniżej obecny log

/home/ubuntu/workspace/hello-world.php:15:
array(4) {
  [0] =>
  string(19) "cors access enabled"
  [1] =>
  array(3) {
    [0] =>
    string(35) "X-Powered-By: PHP/5.5.9-1ubuntu4.21"
    [1] =>
    string(97) "Set-Cookie: XDEBUG_SESSION=cloud9ide; expires=Sat, 29-Apr-2017 18:25:39 GMT; Max-Age=3600; path=/"
    [2] =>
    string(30) "Access-Control-Allow-Origin: *"
  }
  [2] =>
  string(29) "Sat, 29 Apr 17 17:25:41 +0000"
  [3] =>
  array(38) {
    'HTTP_HOST' =>
    string(21) "php-marek2.c9users.io"
    'HTTP_USER_AGENT' =>
    string(65) "Mozilla/5.0 (Windows NT 6.1; rv:55.0) Gecko/20100101 Firefox/55.0"
    'HTTP_ACCEPT' =>
    string(3) "*/*"
    'HTTP_ACCEPT_LANGUAGE' =>
    string(23) "en-US,en;q=0.7,pl;q=0.3"
    'HTTP_ACCEPT_ENCODING' =>
    string(17) "gzip, deflate, br"
    'HTTP_REFERER' =>
    string(25) "https://resttesttest.com/"
    'CONTENT_TYPE' =>
    string(33) "application/x-www-form-urlencoded"
    'HTTP_ORIGIN' =>
    string(24) "https://resttesttest.com"
    'HTTP_DNT' =>
    string(1) "1"
    'HTTP_X_FORWARDED_PROTO' =>
    string(5) "https"
    'HTTP_X_FORWARDED_PORT' =>
    string(3) "443"
    'HTTP_X_REGION' =>
    string(2) "eu"
    'HTTP_X_FORWARDED_FOR' =>
    string(13) "xx.xx.xx.xxx"
    'HTTP_CONNECTION' =>
    string(10) "keep-alive"
    'PATH' =>
    string(375) "/home/ubuntu/.nvm/versions/node/v4.7.3/bin:/usr/local/rvm/gems/ruby-2.3.0/bin:/usr/local/rvm/gems/ruby-2.3.0@global/bin:/usr/local/rvm/rubies/ruby-2.3.0/bin:/mnt/shared/bin:/home/ubuntu/workspace/node_modules/.bin:/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/shared/sbin:/opt/gitl:/opt/go/bin:/mnt/shared/c9/app.nw/bin:/usr/local/rvm/bin"
    'LD_LIBRARY_PATH' =>
    string(15) "~/.c9/local/lib"
    'SERVER_SIGNATURE' =>
    string(82) "<address>Apache/2.4.7 (Ubuntu) Server at php-marek2.c9users.io Port 443</address>
"
    'SERVER_SOFTWARE' =>
    string(21) "Apache/2.4.7 (Ubuntu)"
    'SERVER_NAME' =>
    string(21) "php-marek2.c9users.io"
    'SERVER_ADDR' =>
    string(11) "172.17.0.69"
    'SERVER_PORT' =>
    string(3) "443"
    'REMOTE_ADDR' =>
    string(12) "10.240.0.224"
    'DOCUMENT_ROOT' =>
    string(22) "/home/ubuntu/workspace"
    'REQUEST_SCHEME' =>
    string(5) "https"
    'CONTEXT_PREFIX' =>
    string(0) ""
    'CONTEXT_DOCUMENT_ROOT' =>
    string(22) "/home/ubuntu/workspace"
    'SERVER_ADMIN' =>
    string(18) "[no address given]"
    'SCRIPT_FILENAME' =>
    string(38) "/home/ubuntu/workspace/hello-world.php"
    'REMOTE_PORT' =>
    string(5) "45764"
    'GATEWAY_INTERFACE' =>
    string(7) "CGI/1.1"
    'SERVER_PROTOCOL' =>
    string(8) "HTTP/1.1"
    'REQUEST_METHOD' =>
    string(3) "GET"
    'QUERY_STRING' =>
    string(4) "cors"
    'REQUEST_URI' =>
    string(21) "/hello-world.php?cors"
    'SCRIPT_NAME' =>
    string(16) "/hello-world.php"
    'PHP_SELF' =>
    string(16) "/hello-world.php"
    'REQUEST_TIME_FLOAT' =>
    double(1493486739.207)
    'REQUEST_TIME' =>
    int(1493486739)
  }
}
0

tutaj kupowałem domenę: https://home.pl/
Poza dodaniem linijki powinienem coś jeszcze zmienić może w konfiguracji serwera? Bo twój kod, mój kod podany wyżej umieszczony na moim hostingu nie working. :/

0 użytkowników online, w tym zalogowanych: 0, gości: 0