2012-10-23 162 views
1

我有一個JS庫文件變量(字幕字符串),使用服務器端 JavaScript。我可以閱讀/解釋從PHP?從PHP讀取服務器端JavaScript

數據的路徑不是問題,但PHP是否可以讀取/使用JS變量。目前,我已經在JS文件中存儲了相同的變量,並且PHP包含了明顯的變化範圍以避免同步。我已經嘗試從服務器端 JS閱讀PHP而沒有喜悅,但想知道是否 - 通過適當的解析 - 如果PHP可以提取/使用JS變量。

我重複所有參與數據是在同一臺服務器上服務器端。對不起,如果我錯過了之前回答過的問題,但PHP/JS問題(即使錯誤地標題)似乎都是關於在客戶端和服務器端流程之間傳遞數據 - 這不是我的場景。

後來 - 澄清:

的S/S JavaScript是一種web界面的圖像數據庫,在那裏,我不能改變API的一部分。它不支持創建電子郵件(用於文件請求),因此我不得不通過PHP來完成。工作範圍/預算排除了重新編寫新的d/b接口,而只是爲了能夠發送電子郵件。 IOW,我意識到如果從頭開始,你不會選擇嘗試這樣做!另外,我不認爲我可以通過s/side AJAX來獲取變量或者執行PHP smtp郵件,因爲JS環境看起來並不是爲處理HTML頁面前的那種s/s處理而設計的。

回答

1

這聽起來像你有JS代碼配置值(即字幕)與使用JavasScript互動。

如果你想保持這種方式,我的建議是將配置本身分割成離散的.JS文件,該文件只包含變量定義但不包含實際的JS代碼。

然後,你應該能夠簡單地用PHP解析它,使用json_decode()。任務完成。

+0

是的,這應該工作 - 我可能需要爲s/s JS添加JSON解碼例程,但沒關係。我還需要重新編寫當前的變量庫,但這也不是問題。 – mwra

1

PHP可以通過V8js library

+0

這不是一個基於PHP的JavaScript運行時?不是他的當前服務器端運行時的JavaScript可以與PHP腳本進行通信的方式嗎? –

+0

@JimboJonny - 他當前的服務器端運行時是PHP。他想用它來運行JS。 – Quentin

+0

不太確定這是真的,像*「我嘗試從服務器端JS讀取PHP而沒有喜悅的語句」*這意味着他已經運行JS和PHP服務器環境,並且正在嘗試在它們之間進行通信。 –

1

取決於格式。如果你的文件是附近的任何地方,以JSON和公開訪問(或至少與PHP在同一臺服務器上),你可以這樣做:

文件test.js

var data = { 
    'Hello': 'L-ghodwa it-tajba', 
    'Bye': 'Caw', 
} 

文件reader.php

<?php 

    $data = file_get_contents('test.js'); // or http://url.to/test.js 
    $data = str_replace('var data = ', '', $data); 
    $data = json_decode($data); 
    print_r($data); 

?> 

這個系統也非常高效;它是關於操縱一個字符串並將其解析爲JSON而不是具有完整的JS解析器。但是,您必須強制執行js文件的格式。

編輯︰好吧,好吧,似乎斯普德利先在我的幾秒鐘之前。基本上,我正在做他的建議。

編輯2:我一直在想,你可以簡單地使用JSON文件。這些必須包含JSON,所以格式已經存在;您可以通過JS和PHP使用相同的文件,而不會出現任何問題或反饋。順便說一下,JSON文件以.json的擴展名結尾。您可能需要告訴你的web服務器的MIME類型JSON是什麼,使用(阿帕奇/ htaccess的):

AddType application/json .json 
+0

給Spudley建議JSON的勾號,但感謝您的額外解釋。 – mwra

+0

雖然你可以upvote我的答案。 :) – Christian

1

我想,大多數的答案在客戶機/服務器本案涉及JSON。什麼阻止你使用相同的方法,儘管在服務器上運行js腳本?

您可以將這些變量以JSON格式存儲在一個文件中,並且同時加載JS腳本和PHP腳本。 當然,您的PHP安裝必須首先支持JSON。

+0

哎呀,錯過了這在滾動。 JSON看起來很順利。 – mwra

0

如果您嘗試使用PHP解析JS文件,或者您應該創建一個允許在JS腳本(例如Node中)和PHP之間進行通信的API,那麼您應該使用非常複雜的正則表達式。

問題是,爲什麼你需要以這種方式做到這一點?爲什麼不能以JS和PHP可以使用的格式共享數據?例如JSON。

+0

任何語言語法都可以爲其創建服務器運行時,以便運行服務器端。我相信OP正在討論在服務器端運行javascript語法代碼的環境。考慮到JS的受歡迎程度,我敢打賭,有很多環境可以用於這種用途。我認爲這與用PHP解析它來運行JS代碼沒有任何關係。他們只是想在一些JS服務器端腳本和一些PHP服務器端腳本之間進行一些通信。 –