从Python运行PHP脚本 - 将值从Python传递给PHP

1 投票
3 回答
2991 浏览
提问于 2025-04-17 18:08

解决方案:解决方案链接 ------------------------------------------------------------------

我想在一个Python脚本中执行PHP标准库里的函数getimagesize()。这个函数需要从Python传入一个图片的路径。

我知道怎么在Python中运行一个PHP脚本,但我不知道怎么把参数从Python传给PHP,然后再把结果拿回Python。

这是我在Python脚本中的内容:

def php_script_runner(script_path):
    p = subprocess.Popen(['php', script_path], stdout=subprocess.PIPE)
    result = p.communicate()[0]
    return result

这是我在PHP文件中的内容(我不太确定怎么给它传参数):

<?php getimagesize() ?>

我该如何把参数传给'get_image_size.php',然后让它把结果返回到Python中,以便进一步处理呢?

我还想把这个想法扩展到其他自定义的PHP函数。这个问题的主要目标不仅仅是找出图片的大小,而是将来能够使用这个方法来处理其他需要PHP的功能。

这个问题的主要目标是确定:

  1. 如何在Python中调用PHP脚本
  2. 如何从Python向PHP脚本发送参数
  3. 如何将PHP脚本的输出解析回Python中

3 个回答

2

如果我是你,我会把Python的结果输出成一个JSON(或者可能是XML)对象,然后用PHP脚本重新读取这些信息。如果有可能的话,我强烈建议把这两种语言分成两个不同的网页,甚至可以让Python通过一种叫做GET的方式把数据返回到页面上,也就是我们常说的API风格。

3

使用Python图像库PIL有什么问题呢?

from PIL import Image
im=Image.open(filepath)
print im.size # (height,width) tuple

用PHP脚本来获取图像的尺寸,这样做真是不太对。我想不出有什么是PHP比Python做得更好的,值得同时使用这两种语言的运行环境 :)

我的建议是:一次专注于一种语言,先把Python的标准库学好 :) 如果你能在PHP中做到的事情,应该在Python中也能轻松实现。

3

解决方法是这样做的:

Python:

import subprocess
import json
import sys
import os

def php(script_path, argument):
    p = subprocess.Popen(['php', script_path, argument], stdout=subprocess.PIPE)
    result = p.communicate()[0]
    return result

image_dimensions_json =str(php("get_image_size.php", image_location_relative[1:]))
dic = json.loads(image_dimensions_json)
print str(dic["0"]) + "|" + str(dic["1"])

这里提到的 [1:] 是因为路径中的 "/" 会导致错误。我发现去掉它就解决了这个问题。

PHP:

<?php

echo(json_encode(getimagesize($argv[1])));

?>

echoprint_r 都可以用。我发现把数组转换成 JSON 很简单,因为 Python 的标准库里自带了 JSON 解码器。

希望这对大家有帮助!我打算用这个概念来实现更大的 PHP 函数。

撰写回答