Php 您能在Joomla中显示python web代码吗?

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(

我正在建立一个Joomla 3网站,但我需要定制相当多的页面。我知道我可以将PHP与Joomla结合使用,但也可以将Python与之结合使用吗?具体来说,我希望使用CherryPy编写一些自定义代码,但我希望它们显示在原生Joomla页面中(而不仅仅是iFrame)。这可能吗?

您可以通过php文件执行它。试试这个:

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仍然是未来的发展方向:

  • 你的主机支持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呢?这里有一些与此相关的讨论