4 回答

TA貢獻1951條經(jīng)驗 獲得超3個贊
您的代碼分為兩個完全獨立的部分,即服務器端和客戶端。
|
---------->
HTTP request
|
+--------------+ | +--------------+
| | | | |
| browser | | | web server |
| (JavaScript) | | | (PHP etc.) |
| | | | |
+--------------+ | +--------------+
|
client side | server side
|
<----------
HTML, CSS, JavaScript
|
雙方通過HTTP請求和響應進行通信。PHP在服務器上執(zhí)行并輸出一些HTML和JavaScript代碼,這些代碼作為響應發(fā)送到解釋HTML并執(zhí)行JavaScript的客戶端。一旦PHP完成輸出響應,腳本就會結束,在新的HTTP請求進入之前,服務器上什么都不會發(fā)生。
示例代碼執(zhí)行如下:
<script type="text/javascript">
var foo = 'bar';
<?php
file_put_contents('foo.txt', ' + foo + ');
?>
var baz = <?php echo 42; ?>;
alert(baz);
</script>
第1步,PHP執(zhí)行<?php ?>標記之間的所有代碼。結果是這樣的:
<script type="text/javascript">
var foo = 'bar';
var baz = 42;
alert(baz);
</script>
該file_put_contents呼叫并沒有導致任何東西,它只是寫了“+富+”到文件中。該<?php echo 42; ?>調(diào)用導致輸出“42”,現(xiàn)在該代碼曾經(jīng)是該代碼的位置。
生成的HTML / JavaScript代碼現(xiàn)在發(fā)送到客戶端,在那里進行評估。該alert呼叫工作,而foo變量沒有任何地方使用。
在客戶端甚至開始執(zhí)行任何JavaScript之前,所有PHP代碼都在服務器上執(zhí)行。JavaScript可以與之交互的響應中沒有任何PHP代碼。
要調(diào)用某些PHP代碼,客戶端必須向服務器發(fā)送新的HTTP請求。這可以通過三種可能的方法之一發(fā)生:
一個鏈接,導致瀏覽器加載新頁面。
表單提交,將數(shù)據(jù)提交到服務器并加載新頁面。
一個AJAX請求,它是一種Javascript技術,可以向服務器發(fā)出常規(guī)HTTP請求(如1.和2.將),但不會離開當前頁面。
您還可以使用JavaScript使瀏覽器使用window.location
或提交表單打開新頁面,模擬可能性1.和2。

TA貢獻1827條經(jīng)驗 獲得超9個贊
您的Javascript將在客戶端上執(zhí)行,而不是在服務器上執(zhí)行。這意味著foo
不在服務器端進行評估,因此無法將其值寫入服務器上的文件。
考慮此過程的最佳方式就是您動態(tài)生成文本文件。您生成的文本只有在瀏覽器解釋后才會成為可執(zhí)行代碼。只<?php
在服務器上評估您在標簽之間放置的內(nèi)容。
順便說一句,養(yǎng)成在HTML或Javascript中嵌入隨機PHP邏輯片段的習慣會導致嚴重錯綜復雜的代碼。我說的是痛苦的經(jīng)歷。
添加回答
舉報