搜尋

首頁  >  問答  >  主體

遇到錯誤:嘗試在cPanel伺服器設定上使用PHP取得Json數據

<p>我有一個包含javascript的index.html檔案:</p> <pre class="brush:php;toolbar:false;">async function fetchCelebritiesData() { try { const response = await fetch('/data.php'); const data = await response.json(); return data; } catch (error) { console.error('Error fetching data:', error); return []; } }</pre> <p>PHP檔案將資料連接到應用程序,並從names.json檔案中獲取資料。 </p> <pre class="brush:php;toolbar:false;"><?php // 檢查請求是否來自允許的域名 $allowedOrigins = array("example.com", "www.example.com"); $origin = $_SERVER['HTTP_ORIGIN'] ?? ''; // 從請求中取得HTTP_ORIGIN if (in_array($origin, $allowedOrigins)) { header("Access-Control-Allow-Origin: $origin"); } else { header("HTTP/1.1 403 Forbidden"); exit; } // 讀取並輸出JSON數據 $data = file_get_contents("data.json"); header("Content-Type: application/json"); echo $data; ?></pre> <p>這個設定在控制台中給我一個錯誤,錯誤訊息如下:</p> <pre class="brush:php;toolbar:false;">ET https://example.com.com/data.php 403 fetchCelebritiesData @ (index):291 (anonymous) @ (index):375 load (async) (anonymous) @ (index):373 (index):295 Error fetching data: SyntaxError: Unexpected end of JSON input at fetchCelebritiesData ((index):292:33) 在 async (index):375:30 fetchCelebritiesData @ (index):295 await in fetchCelebritiesData (async) (anonymous) @ (index):375 load (async) (anonymous) @ (index):373</pre> <p>需要幫助理解可能的問題。我已經檢查了PHP和JSON檔案以及資料夾的權限,看起來都沒問題。 --6 4 4--</p> <p>產生了一個日誌,顯示了這個錯誤的重複。 </p> <p><code>[11-Aug-2023 09:08:58 UTC] PHP Notice: Undefined index: HTTP_ORIGIN in /home/pixellic/public_html/web-applications/celebrities-age-finder/get_secure_data.public_html/web-applications/celebrities-age-finder/get_secure_data.public_html/php on line 4</code></p> <p>我是一個編碼新手。 </p> <p>謝謝。 </p> <p>我嘗試使用php檔案安全地取得json資料。 </p> <p>但是我得到了一個403錯誤。 </p>
P粉896751037P粉896751037519 天前446

全部回覆(1)我來回復

  • P粉124070451

    P粉1240704512023-08-14 14:32:25

    除非您在請求中發送了一個Origin頭部(請參閱手冊),否則$_SERVER中不會有HTTP_ORIGIN元素。但是您可以使用REMOTE_HOST來取代:

    $origin = $_SERVER['REMOTE_HOST'] ?? '';
    

    正如您所指出的,您的程式碼會導致403錯誤,這是因為此測試失敗(因為$origin始終是''):

    if (in_array($origin, $allowedOrigins)) {
    

    請注意,在可能發送Origin頭部的情況下,您可以將REMOTE_HOST用作備用:

    $origin = $_SERVER['HTTP_ORIGIN'] ?? $_SERVER['REMOTE_HOST'] ?? '';
    

    回覆
    0
  • 取消回覆