Saya ada kod ini:
<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script>
Mengapa ini tidak menulis "bar" pada fail teks saya sebaliknya memberi amaran kepada "42"?
Nota: Semakan awal soalan ini secara eksplisit menangani PHP pada pelayan dan JavaScript pada klien. Apabila satu bahasa berjalan pada klien dan bahasa lain pada pelayan (walaupun bahasa yang sama), sifat masalah dan penyelesaian adalah sama untuk sebarang bahasa. Pertimbangkan ini apabila anda melihat jawapan yang bercakap tentang bahasa tertentu.
Untuk menentukan sebab kod PHP tidak berfungsi dalam kod JavaScript, kita perlu memahami bahasa sebelah pelanggan dan sebelah pelayan dan cara ia berfungsi.
Bahasa sisi pelayan (PHP, dll.) : Mereka mendapatkan semula rekod daripada pangkalan data, menyambung melalui tanpa negara HTTP, dan melakukan banyak operasi yang memerlukan keselamatan. Mereka berada di pelayan dan program ini tidak pernah mendedahkan kod sumber mereka kepada pengguna.
Jadi, anda boleh melihat dengan mudah bahawa bahasa sebelah pelayan mengendalikan permintaan HTTP dan memprosesnya, dan, seperti yang dikatakan @deceze, PHP melaksanakan pada pelayan dan mengeluarkan beberapa kod HTML dan mungkin JavaScript, yang dihantar kepada klien sebagai Respons , yang mentafsir HTML dan melaksanakan JavaScript.
Sebaliknya, bahasa sebelah pelanggan (seperti JavaScript) ada dan dijalankan dalam penyemak imbas. Skrip sebelah pelanggan biasanya merujuk kepada kelas program komputer pada rangkaian yang dilaksanakan sebelah klien oleh pelayar web pengguna, bukannya sebelah pelayan. p>
JavaScript kelihatan kepada pengguna dan boleh diubah suai dengan mudah, jadi untuk keselamatan kami tidak boleh bergantung pada JavaScript.
Jadi apabila anda membuat permintaan HTTP kepada pelayan, pelayan terlebih dahulu membaca fail PHP dengan teliti untuk melihat sama ada terdapat sebarang tugas yang perlu dilakukan, dan kemudian menghantar respons kepada klien. Sekali lagi, seperti yang dikatakan @deceze, *sebaik sahaja PHP selesai mengeluarkan respons, skrip tamat dan tiada apa yang berlaku pada pelayan sehingga permintaan HTTP baharu datang. *
Jadi sekarang bagaimana jika saya perlu menghubungi PHP? Ia bergantung pada cara anda perlu melakukan ini: dengan memuat semula halaman atau menggunakan panggilan AJAX.
Bacaan yang bagus:
Kod anda dibahagikan kepada dua bahagian bebas sepenuhnya, sebelah pelayan dan sebelah pelanggan.
Kedua-dua pihak berkomunikasi melalui permintaan dan respons HTTP. PHP melaksanakan pada pelayan dan mengeluarkan beberapa kod HTML dan mungkin JavaScript, yang dihantar sebagai respons kepada klien, di mana HTML ditafsirkan dan JavaScript dilaksanakan. Setelah PHP selesai mengeluarkan respons, skrip tamat dan tiada apa yang berlaku pada pelayan sehingga permintaan HTTP baharu datang.
Kod contoh dilaksanakan seperti berikut:
Langkah 1, PHP melaksanakan semua kod antara
teg. Hasilnya begini:
file_put_contents
调用没有产生任何结果,它只是将“ + foo + ”写入文件。Panggilan menghasilkan output "42", yang kini terletak di tempat asal kod itu.
Kod HTML/JavaScript yang dijana kini dihantar kepada pelanggan dan dinilai di sana.
alert
调用有效,而foo
Pembolehubah tidak digunakan di mana-mana.Semua kod PHP dilaksanakan pada pelayan sebelum pelanggan mula melaksanakan sebarang JavaScript. Tiada kod PHP yang tinggal dalam respons yang JavaScript boleh berinteraksi.
Untuk memanggil kod PHP tertentu, pelanggan mesti menghantar permintaan HTTP baharu kepada pelayan. Ini boleh dicapai menggunakan salah satu daripada tiga kaedah yang mungkin:
Berikut ialah soalan yang menggariskan kaedah ini dengan lebih terperinci
Anda juga boleh menggunakan JavaScript untuk memberitahu pelayar menggunakan
window.location
untuk membuka halaman baharu atau menyerahkan borang, meniru kemungkinan 1. dan 2.