Php 您能在Joomla中显示python web代码吗?
我正在建立一个Joomla 3网站,但我需要定制相当多的页面。我知道我可以将PHP与Joomla结合使用,但也可以将Python与之结合使用吗?具体来说,我希望使用CherryPy编写一些自定义代码,但我希望它们显示在原生Joomla页面中(而不仅仅是iFrame)。这可能吗?您可以通过php文件执行它。试试这个:Php 您能在Joomla中显示python web代码吗?,php,python,joomla,cherrypy,joomla3.0,esi,Php,Python,Joomla,Cherrypy,Joomla3.0,Esi,我正在建立一个Joomla 3网站,但我需要定制相当多的页面。我知道我可以将PHP与Joomla结合使用,但也可以将Python与之结合使用吗?具体来说,我希望使用CherryPy编写一些自定义代码,但我希望它们显示在原生Joomla页面中(而不仅仅是iFrame)。这可能吗?您可以通过php文件执行它。试试这个: exec("python/path/your-script.py"); 这是可能的,但效率不高 可以使用exec()函数从PHP执行Python脚本: PHP代码: exec(
exec("python/path/your-script.py");
这是可能的,但效率不高
可以使用exec()函数从PHP执行Python脚本:
PHP代码:
exec("python /path/to/python-script.py");
还有许多类似的PHP函数可用于
完成同样的事情,但在输入和输出的方式上有细微的差异
处理输出(通过、系统、过程打开、回跳)
Python脚本将使用其命令行界面执行-
不使用CGI(或类似的)界面,因为如果web
服务器直接执行Python脚本。这意味着
Python脚本将无法访问有关HTTP的信息
请求-获取/发布值、客户端的IP地址、页面URL等。
您可以使用命令行将这些信息从PHP传递到Python
参数、管道、临时文件或其他形式的
进程间通信,但您需要传递每个
明确要求的信息
这种方法效率低下的原因是,每次调用exec都会
为Python脚本生成一个全新的过程。这是一个公平的选择
对每个HTTP请求执行昂贵的操作(这就是为什么服务器
像Apache和像Fast CGI这样的接口重用子进程和
线程,而不是创建新线程)。此外,如果您有更多
不止一次调用exec,每一次调用都会产生一个新的
过程
摘自
更多信息:从不同来源(Joomla和CherryPy)构建页面的最有效方法可能是使用Edge-Side-Includes 基本上,您运行一个Joomla实例,该实例为包含ESI标记的文档提供服务。您运行了一个CherryPy实例,该实例为您想要放在esi标记位置上的片段提供服务。然后运行一个支持ESI的反向代理,就像varnish一样将其缝合在一起 这可能看起来像很多运动部件,但它的反应会像。。。真正有反应的东西。调整缓存部分,您就可以从大量工作中解放Joomla和数据库
其他答案中的
exec
方法适用于打印内容的小型python脚本,但不适用于CherryPy。在考虑python之前
<?php
// execute your Python script from PHP
$command = escapeshellcmd('myPythonScript.py');
$output = shell_exec($command);
echo $output;
// take response content to embed it into the page
?>
- 您想要定制什么?(可能已经存在一些聪明的Javascript或Joomla扩展)
- 鉴于您正在使用Joomla,Joomla方式不是解决您问题的更好方法吗?(更改模板,尤其是模块和组件的视图模板) i、 o.w.:你对Joomla了解得够多,知道你还需要别的东西吗?见下文:
- 你的主机支持Python吗
- 你应该重新考虑你对CMS的选择吗
我喜欢您选择的CherryPy。PHP执行Python“脚本”
<?php
// execute your Python script from PHP
$command = escapeshellcmd('myPythonScript.py');
$output = shell_exec($command);
echo $output;
// take response content to embed it into the page
?>
这将适用于脚本,它执行填充并返回输出,而不适用于CherryPy
<?php
// execute your Python script from PHP
$command = escapeshellcmd('myPythonScript.py');
$output = shell_exec($command);
echo $output;
// take response content to embed it into the page
?>
这将启动一个http://localhost:8080
你应该看到你好,世界代码>
现在,您可以通过访问CherryPy的localhost:port
来访问它的输出。
性能不好,但工作正常
<?php
$output = file_get_contents('http://localhost:8080/');
echo $output;
?>
Joomla+Ajax访问Pyton/CherryPy服务的网站
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
另一种解决方案是,不使用PHP获取内容,而是从客户端获取内容。基本上,您将使用Ajax请求访问CherryPy服务的网站,获取其内容并将其嵌入Joomla服务页面的dom中
// add jQuery Ajax reqeust from your Joomla page to CherryPy
$.ajax({
url: "https://localhost:8080/", // <-- access the 2nd served website
type: 'GET',
success: function(res) {
//console.log(res);
alert(res);
$("#someElement").html(res);
}
});
//将jQuery Ajax请求从Joomla页面添加到CherryPy
$.ajax({
url:“https://localhost:8080/",//哦,非常有趣。这是否也适用于输出到CherryPy这样的web框架的python脚本?或者我如何使该python脚本输出web项?@JimBeam这只适用于打印输出并退出的进程。正如您所怀疑的,CherryPy是一个长时间运行的进程,不会打印web内容。“无法将Python代码放到Joomla”似乎更多的是关于将Python Web应用程序移植到Joomla。你已经有Joomla站点了吗?如果你不喜欢PHP并且喜欢Python(我不怪你),为什么不使用Python编写的CMS呢?这里有一些与此相关的讨论