Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
执行python脚本从PHP发送SMS时出错_Php_Python_Exec_Gammu - Fatal编程技术网

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

执行python脚本从PHP发送SMS时出错,php,python,exec,gammu,Php,Python,Exec,Gammu,实际上,这个问题可以通过使用配置文件的路径作为函数的参数来解决 sm.ReadConfig(Filename="/home/myuser/.gammurc") 我正在使用python的Gammu库。我的想法是创建一个可以发送SMS的python脚本,以便以后从PHP脚本调用它 下面是python脚本的代码 #!/usr/bin/env python import gammu import sys sm = gammu.StateMachine() sm.ReadConfig() if

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

sm.ReadConfig(Filename="/home/myuser/.gammurc")
我正在使用python的Gammu库。我的想法是创建一个可以发送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"
如果我从terminal使用此脚本工作正常,问题是当我使用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用户(假设这是通过apache等web服务器执行的)获取文件

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

脚本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个权限