2012-04-22 8 views
7

मैं एक crontab बनाने में कामयाब रहे,एक चर को क्रॉन्टाब पास करें और इसे PHP से पढ़ें?

उदाहरण के लिए

, * * * * * php /my/directory/file.php

मैं file.php

मैं यह कैसे कर सकते हैं अंदर इसे पढ़ने के लिए इस crontab से एक चर पारित करने के लिए करना चाहते हैं?

धन्यवाद।

उत्तर

10

ध्यान रखें कि खोल से PHP चलाना वेब सर्वर वातावरण में इसे चलाने से बिल्कुल अलग है। यदि आपने पहले कमांड लाइन प्रोग्रामिंग नहीं की है, तो आप कुछ आश्चर्यों में भाग सकते हैं।

उसने कहा, कमांड में जानकारी पास करने का सामान्य तरीका इसे कमांड लाइन पर डालकर है। आप ऐसा करते हैं: अपनी स्क्रिप्ट के अंदर फिर

php /my/directory/file.php "some value" "some other value" 

, $argv[1]"some value" पर सेट हो जाएगा और $argv[2]"some other value" करने के लिए सेट कर दिया जाएगा। ($argv[0] को "/my/directory/file.php" पर सेट किया जाएगा)।

+0

मैंने कोशिश की, यह काम नहीं किया। क्या मुझे कोटेशन के बीच दूसरा तर्क देना है ताकि मैं इसे वहां पढ़ सकूं? क्योंकि मैंने कमांड में कोटेशन का उपयोग नहीं किया था। –

+0

क्या आपका PHP कमांड लाइन के लिए बनाया गया है? यह एक अलग एसएपीआई है, और सीजीआई के लिए उपयोग किए जाने वाले एक से अलग PHP बाइनरी की आवश्यकता होती है। –

+0

मैं shell_exec ("कमांड") कमांड का उपयोग करता हूं; crontabs बनाने के लिए –

6

जब आप कमांड लाइन से एक PHP स्क्रिप्ट निष्पादित करते हैं, तो आप $argc से वैरिएबल गिनती और सरणी में वास्तविक मानों तक पहुंच सकते हैं। एक साधारण उदाहरण।

पर विचार करें test.php

<?php 
printf("%d arguments given:\n", $argc); 
print_r($argv); 

इस निष्पादित php test.php a b c का उपयोग कर:

4 arguments given: 
Array 
(
    [0] => test.php 
    [1] => a 
    [2] => b 
    [3] => c 
) 
+0

+1। –

1

मैं से निपटने है कि और अधिक परिष्कृत कमांड लाइन पैरामीटर के लिए आप उपयोग करना चाहते हो सकता है जवाब में जोड़ने के लिए कर सकते हैं getopt(): http://www.php.net/manual/en/function.getopt.php

0

एन उपर्युक्त तरीकों में से कोई भी मेरे लिए काम करता है। मैं अपने होस्टर के साझा सर्वर पर क्रॉन चलाता हूं। क्रॉन कार्य सीपीनल जैसे इंटरफ़ेस के साथ बनाया गया है। कमांड लाइन PHP को स्क्रिप्ट नाम और कुछ तर्कों को पास करती है।

यही कारण है कि कैसे क्रॉन के लिए कमांड लाइन लग रहा है:

php7.2 /server/path/to/my/script/my-script.php "test.tst" "folder=0"

न तो की साथ ऊपर जवाब मेरे मामले के लिए काम किया।

समस्या यह नहीं बताई गई थी कि आपको सीएलआई तर्कों तक पहुंच प्राप्त करने से पहले वैश्विक रूप से घोषित करना होगा। यह आधिकारिक PHP मैनुअल में न तो उल्लेख किया गया है।

ठीक है, शायद किसी को सर्वर के साथ चलने वाली स्क्रिप्ट के लिए वैश्विक ऑनी घोषित करना होगा। शायद सीएलआई में एक स्थानीय पर्यावरण चल रही स्क्रिप्ट में वैश्विक घोषित होने की आवश्यकता नहीं है। जब मैं इसका परीक्षण करता हूं तो मैं यहां पोस्ट करता हूं।

लेकिन मेरे मामले के लिए nevertherless काम कर विन्यास है:

global $argv; 
echo "argv0: $argv[0]\n\r"; // echoes: argv0: /server/path/to/my/script/my-script.php 
echo "argv1: $argv[1]\n\r"; // echoes: argv1: test.tst 
echo "argv2: $argv[2]\n\r"; // echoes: argv2: folder=0 

मैं $_SERVER['argv'] superglobal सरणी के साथ एक ही परिणाम मिला है। एक इस तरह इसका इस्तेमाल कर सकते हैं:

$myargv = $_SERVER['argv']; 
echo $myargv[1]; // echoes: test.tst 

आशा है कि किसी को मदद मिलती है।

संबंधित मुद्दे