2011-02-23 50 views
1

我有一個Prolog代碼data.pl,我需要從PHP文件中使用它。從我在互聯網搜索,我發現這個:使用PHP文件連接Prolog文件

exec('start <path/to/prolog> -f data.pl -g elem(a,[a,b])', $output) 

我已經試過這與Shell-exec()system()命令,但他們不工作的。我也嘗試更正目錄路徑,並將data.pl移動到path/to/prolog文件夾,但仍然沒有結果。有人可以幫我解決這個問題嗎?

+0

如果您正在使用SWI-Prolog(也許,即使您不是),那麼http://www.j-paine.org /dobbs/prolog_from_php.html可能會有所幫助。 – sharky 2011-02-23 22:58:41

+0

@sharky;這是我拿到代碼的頁面,我嘗試了這裏的所有代碼。謝謝... – akasya 2011-02-24 17:52:16

回答

0

將Web應用程序與Prolog應用程序集成的更好方法是使用SWI的內置HTTP服務器。它將免去您加載Prolog並在每次調用時解析輸入文件的需要。它還提供了更多的web-ish集成,因爲您可以使用AJAX和類似的方法。

如果你堅持從PHP運行時環境中調用Prolog可執行文件本身,你將不得不提供更多的細節。你在PHP日誌中遇到什麼錯誤?你有沒有檢查文件的權限?您是否嘗試給Prolog可執行文件和數據文件提供完整路徑?只是說「它不起作用」是一個陳述,而不是一個問題。

最後,對於效率問題,建議將Prolog數據文件編譯爲快速加載格式(QLF),而不是用每個請求重新解析它。

+0

讓我解釋一下我需要做什麼:我需要創建一個php頁面,我可以使用一個prolog文件,這將幫助我測試一些謂詞並做一些工作(給我解決方案)。隨着代碼,我已經測試,直到知道我沒有收到任何解決方案,意思是,當我執行PHP文件的IE瀏覽器不打開我的網頁(所有的時間都在旋轉的圓圈)。我沒有收到任何錯誤消息,這就是爲什麼我無法定義問題。我打開每種解決方案嘗試,只是爲了實現... – akasya 2011-02-24 17:45:24

+0

@akasya,我不知道你的PHP環境有什麼問題,沒有看到一些日誌或跟蹤。嘗試添加打印消息來解決問題。此外,嘗試從命令提示符運行您嵌入到PHP中的命令行,以查看它是否可用。 – 2011-02-27 06:59:59

0

使用'start'命令將強制程序在新的會話中運行,並且IO管道不是確定的。我的DOS經驗有點生疏 - 但是在這個語句中,有很多東西會被解釋爲Unix機器上的shell元數據。假設Prolog解釋器使用STDIO,命令應該是:

$cmd='C:\\Program Files\\pl\\bin\\plwin -f data.pl -g elem(a,[a,b])'; 
    // $cmd=escapeshellcmd($cmd); // in case you're still having problems 
    exec($cmd, $output); 
+0

非常感謝您的關心,我嘗試了這種方法,但無效。當我執行我寫這段代碼的.php文件時,Internet Explorer不會打開頁面(IE所有時間的循環都在旋轉)。有任何錯誤信息或其他內容。這就是爲什麼我不知道問題出在哪裏。我可以嘗試其他什麼? – akasya 2011-02-24 17:35:57