2011-02-23 49 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