Я новичок в Wordpress / Woocommerce и пытаюсь запустить скрипт на Python, когда заказ будет выполнен.Я создал следующий плагин:
<?php
/**
* Plugin Name: Run Python Script on Order Completion
* Plugin URI: http://www.mindspan.net
* Description: Fires a Python script which queries the database
* Version: 1.0
* Author: Ray Richards
* Author URI: http://www.mindspan.net
*/
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
function logIt( $order_id ) {
error_log( "Order complete for order $order_id", 0 );
$command = escapeshellcmd('/var/www/html/wp-content/plugins/mindspan/getValues.py');
shell_exec($command);
}
add_action( 'woocommerce_order_status_completed', 'logIt', 10, 1 );
?>
Когда заказ завершен, функция определенно выполняется, когда я получаю, например, «Заказ завершен для заказа 8679» в журнале ошибок PHP - без других ошибокуказывается;однако скрипт Python, указанный в функции, не запускается.Вот сценарий Python:
#!/usr/bin/env python
import mysql.connector
textFile = open("testing.txt", "w+")
mydb = mysql.connector.connect(
host="myHost",
user="myUser",
passwd="myPassword",
database="myDatabase"
)
mycursor = mydb.cursor()
mycursor.execute("SELECT guid FROM wpv2_posts WHERE post_type = 'shop_order' AND post_status = 'wc-completed' ORDER BY id DESC LIMIT 10")
myresult = mycursor.fetchall()
for result, in myresult:
print(result)
textFile.write("%s \n" % result)
textFile.close()
Папка и файлы принадлежат пользователю www-data (я нахожусь на Debian Stretch, размещенном на облачной платформе Google) и когда я выполняю su для этого пользователя и выполняю функцию изкомандная строка (комментируя часть add_action):
sudo su www-data -s /bin/sh
php -r "require 'myFile.php'; logIt(8679);"
Сценарий Python выполняется и создается файл с результатами.
Я также попробовал system () и passthru () и поместил еще один журнал ошибок ПОСЛЕ двух строк, вызывающих скрипт Python, и он также выводит это сообщение в журнал.Когда я создаю еще один файл test.php со следующим содержимым:
<?php
//$command = escapeshellcmd('/var/www/html/wp-content/plugins/mindspan/getValues.py');
//shell_exec($command);
passthru('/usr/bin/python /var/www/html/wp-content/plugins/mindspan/getValues.py 1 2>&1');
?>
и запускаю его из командной строки, команды с комментариями и без комментариев работают должным образом.Я даже изменил (временно) права доступа к каталогу на 777 ... без кубиков.
Поэтому я хотел бы понять, что мешает запускать скрипт Python при его вызове из WooCommerce PHP.Любые предложения будут искренне оценены!