我有這個程式碼:
<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script>
為什麼這不會將「bar」寫入我的文字文件,而是警告「42」?
注意:這個問題的早期修訂明確涉及伺服器上的 PHP 和客戶端上的 JavaScript。當一種語言在客戶端上運行而另一種語言在伺服器上運行時(即使它們是相同的語言),問題和解決方案的本質對於任何語言都是相同的。當您看到談論特定語言的答案時,請考慮這一點。
P粉7576405042023-10-20 09:47:31
要確定為什麼PHP 程式碼在JavaScript 程式碼中不起作用,我們需要了解什麼是客戶端和伺服器端< /strong>語言是什麼,以及它們如何運作。
伺服器端語言(PHP 等):它們從資料庫檢索記錄,透過無狀態 HTTP 連接,並執行許多需要安全性的操作。它們駐留在伺服器上,這些程式永遠不會將其原始程式碼暴露給使用者。
因此,您可以輕鬆地看到伺服器端語言處理HTTP 請求並處理它們,並且,正如@deceze 所說,PHP 在伺服器上執行並輸出一些HTML,也許還有JavaScript 程式碼,這些程式碼作為對客戶端的回應,其中解釋HTML 並執行JavaScript。
另一方面,客戶端語言(如 JavaScript)駐留在瀏覽器中並在瀏覽器中執行。 客戶端腳本通常是指網路上由使用者的網頁瀏覽器在客戶端執行的一類電腦程序,而不是伺服器端。 p>
JavaScript 對使用者可見,並且可以輕鬆修改,因此對於安全性,我們不能依賴 JavaScript。
所以當你向伺服器發出HTTP請求時,伺服器首先仔細讀取PHP文件,看看是否有需要執行的任務,然後向客戶端發送回應。再次,正如 @deceze 所說,*一旦 PHP 完成輸出回應,腳本就會結束,伺服器上不會發生任何事情,直到新的 HTTP 請求到來。 *
那麼現在如果我需要呼叫PHP該怎麼辦呢?這取決於您需要如何執行此操作:透過重新載入頁面或使用 AJAX 呼叫。
好讀:
P粉2183619722023-10-20 09:32:54
您的程式碼分為兩個完全獨立的部分,伺服器端和客戶端。
|
---------->
HTTP request
|
+--------------+ | +--------------+
| | | | |
| browser | | | web server |
| (JavaScript) | | | (PHP etc.) |
| | | | |
+--------------+ | +--------------+
|
client side | server side
|
<----------
HTML, CSS, JavaScript
|
雙方透過 HTTP 請求和回應進行通訊。 PHP 在伺服器上執行,並輸出一些 HTML 和可能的 JavaScript 程式碼,這些程式碼會作為回應傳送到客戶端,在客戶端解釋 HTML 並執行 JavaScript。一旦 PHP 完成輸出回應,腳本就會結束,伺服器上不會發生任何事情,直到新的 HTTP 請求到來。
範例程式碼的執行方式如下:
<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script>
第1步,PHP執行標籤之間的所有程式碼。結果是這樣的:
<script type="text/javascript"> var foo = 'bar'; var baz = 42; alert(baz); </script>
file_put_contents
呼叫沒有產生任何結果,它只是將「 foo 」寫入檔案。 呼叫導致輸出“42”,現在位於該程式碼原來的位置。
產生的 HTML/JavaScript 程式碼現在被傳送到客戶端,並在那裡進行評估。 alert
呼叫有效,而 foo
變數未在任何地方使用。
所有 PHP 程式碼都在客戶端開始執行任何 JavaScript 之前在伺服器上執行。回應中沒有留下 JavaScript 可以與之互動的 PHP 程式碼。
要呼叫某些 PHP 程式碼,客戶端必須傳送新的 HTTP 請求給伺服器。這可以使用三種可能的方法之一來實現:
您也可以使用 JavaScript 讓瀏覽器使用 window.location
開啟新頁面或提交表單,模擬可能性 1. 和 2。