0

編集実際には、設定ファイルのパスを関数のパラメーターとして使用して問題を解決できます

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"

ターミナルからこのスクリプトを使用すると正常に動作しますが、問題は、exec() を使用して PHP からスクリプトを呼び出すと、ReadConfig() 関数を実行しているときに Gammu ライブラリからエラーが発生することです。

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

「sudo adduser www-data dialout」コマンドを実行して、Web サーバーに gammu を使用する許可を既に与えましたが、他に何が問題なのかわかりません。

これは、PHP からスクリプトを呼び出す方法です。

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

助けやアドバイスを探しています、ありがとう。

4

1 に答える 1

0

あなたが投稿したエラーから、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 サーバー経由で実行されている場合、Web サーバーがディレクトリをトラバースし、ファイルに 644 のアクセス許可があると仮定してファイルを読み取ることができるように、'myuser' に 755 のアクセス許可が必要になる可能性があります。

于 2014-12-01T20:14:30.500 に答える