繁体   English   中英

执行python脚本从PHP发送短信时出错

[英]Error while executing a python script to send SMS from PHP

编辑实际上,可以使用配置文件的路径作为函数的参数来解决问题

sm.ReadConfig(Filename="/home/myuser/.gammurc")

我正在将Gammu库用于python。 我的想法是创建一个可以发送SMS的python脚本,以后再从脚本PHP中调用它。

这是python脚本的代码。

#!/usr/bin/env python

import gammu
import sys

sm = gammu.StateMachine()

sm.ReadConfig()

if len(sys.argv) != 3:
    print 'Uso: sms.py MENSAJE DESTINATARIO'
    sys.exit(1)

rawtext = sys.argv[1]
spttext = rawtext.split("*e*")
text = " ".join(spttext)

sm.Init()

message = {
    'Text': text,
    'SMSC': {'Location': 1},
    'Number': sys.argv[2],
}

if (sm.SendSMS(message)):
    print "OK"

如果我从终端使用此脚本可以正常工作,则问题在于,当我使用exec()从PHP调用脚本时,运行ReadConfig()函数时,我会从Gammu库收到错误消息:

gammu.ERR_CANTOPENFILE: {'Text': u'Can not open specified file.', 'Code': 28, 'Where': 'FindGammuRC via ReadConfig'}

我已经允许Web服务器使用gammu,并运行命令“ sudo adduser www-data Dialout”,但是我不知道还有什么问题。

这是我从PHP调用脚本的方式:

$rcmd="python /home/my_user/Escritorio/pythonSMS/sms.py -V 2>&1";
exec($rcmd, $output);

我正在寻找任何帮助或建议,谢谢。

从您发布的错误来看,似乎通过PHP执行它时,目录权限或沿路径设置的读取权限阻止了PHP用户(假设这是通过Web服务器(例如apache)执行的)来采购文件。

最简单的方法是这样的简单的事情:

脚本A:

#!/usr/bin/env python
file = open('/home/myuser/.gammurc' , r)
for line in file:
    print line

脚本B:

<?php
    $cmd = '/path/to/script/A';
    exec($cmd);
?>

从理论上讲,这应该会产生类似的错误。 如果是这种情况,请检查.gmamurc上的目录权限以及文件权限。 如果这是通过Web服务器执行的,则您可能需要对“ myuser”具有755权限,以便Web服务器能够遍历目录,然后假设该文件具有644权限来读取该文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM