قم بتشغيل MySQL Query بعد WGET انتهاء تنزيل الملف
سؤال
أحتاج إلى تشغيل استعلام MySQL محدد عند WGET، والتي تعمل في الخلفية، تنتهي من تنزيل ملف. علي سبيل المثال...
ثم اركض:
تحديث
table
تعيينstatus
= 'Live' أينid
= '1234'
كيف لي أن تذهب عن القيام بذلك؟
المحلول
أود أن أوصي بإطلاق الأمر WGET في Subshell حتى تتمكن من التأكد من أنه يكمل قبل تشغيل أمر MySQL الخاص بك. في باش، يتم ذلك مع قوسين.
أيضا استخدام &&
بحيث يعمل الأمر MySQL فقط في حالة وجود أمر WGET حالة الخروج من النجاح.
#!/bin/sh
(
wget "http://domain/file.zip" && mysql -u user -ppassword database -e "UPDATE..."
) &
وضع كلمة المرور في النص العادي في البرنامج النصي ليس بالضرورة فكرة جيدة لأنه يمكن أن ينظر إليه في ps
قائمة.
بدلا من ذلك، يمكنك الاعتماد على [client]
القسم الخاص بك ~/.my.cnf
ملف. يمكنك أيضا استخدام MYSQL_PWD
متغيرات البيئة. أي من هذه الحلول تعني عدم وجود كلمة مرور غير مرئية في قائمة الأوامر.
نصائح أخرى
wget http://domain/file.zip && mysql -u user -ppassword database -e "UPDATE table SET status = 'live' WHERE id = '1234'"
في باش، من المحتمل أن تكون بسيطة مثل:
#!/bin/bash
wget -q http://domain.tld/file.zip || exit 0
/usr/bin/php somefile.php
مع ملف .php الذي يحتوي على استعلام MySQL الخاص بك.
يمكنك أيضا تشغيل عبارة MySQL مباشرة عبر عميل MySQL (تم نشره بالفعل)، ولكن يجب أن تكون حذرا من وجود كلمة مرور MySQL الخاصة بك في Syslog / History.
حسنا، يمكنك فقط وضعه في برنامج نصي شل.
لا أعرف أنلا عن شل لأخبرك كيف
لماذا لا تستخدم file_get_contents
أو curl
لتنزيل الملف من داخل PHP؟
$data = file_get_contents('http://domain/file.zip');
file_put_contents('file.zip', $data);
mysql_query("UPDATE table SET status = 'live' WHERE id = '1234'");
يمكنك البرنامج النصي في بيثون وهكذا ...
#!/usr/bin/python
import sys, MySQLdb, urllib
urllib.urlretrieve(sys.argv[1], sys.argv[2])
db = MySQLdb.connect(host="localhost", user="username", passwd="password", db="database")
cursor = db.cursor()
cursor.execute("UPDATE table SET status = 'live' WHERE id = '1234'")
هذا يأخذ عنوان URL المصدر كوسيطة الأولى واسم الملف الوجهة في الثانية. ملاحظة هذا يستخدم Pythons الخاص بك مكتبة استرجاع URL الخاص بك URLLIB، إذا كان لديك أي سبب لديك لاستخدام WGET على وجه التحديد، يمكنك استيراد وحدة "نظام التشغيل" واستخدام نظام Os.System ("سطر الأوامر").
في UNIX، يمكنك تشغيل البرنامج النصي في الخلفية عن طريق كتابة "Python ScriptName.py"