फ़ॉर्म सबमिट करने के बाद मैं पृष्ठभूमि में PHP स्क्रिप्ट कैसे चला सकता हूं?


104

समस्या
मेरे पास एक फॉर्म है, जिसे सबमिट करते समय, सबमिट की गई जानकारी को संसाधित करने के लिए एक बुनियादी कोड चला जाएगा और इसे एक अधिसूचना वेबसाइट पर प्रदर्शित करने के लिए डेटाबेस में डाला जाएगा। इसके अलावा, मेरे पास उन लोगों की एक सूची है, जिन्होंने ईमेल और एसएमएस संदेश के माध्यम से इन सूचनाओं को प्राप्त करने के लिए साइन अप किया है। यह सूची क्षण के रूप में तुच्छ है (केवल 150 के बारे में जोर दे रही है), हालांकि यह पर्याप्त है क्योंकि यह ग्राहकों की पूरी तालिका के माध्यम से चक्र में एक मिनट से ऊपर ले जाता है और 150+ ईमेल भेजता है। (ईमेल को बड़े पैमाने पर ईमेल नीतियों के कारण हमारे ईमेल सर्वर के सिस्टम प्रशासकों द्वारा अनुरोध के अनुसार व्यक्तिगत रूप से भेजा जा रहा है।)

इस समय के दौरान, अलर्ट पोस्ट करने वाला व्यक्ति बिना किसी सकारात्मक सुदृढीकरण के लगभग एक मिनट के लिए फॉर्म के अंतिम पृष्ठ पर बैठ जाएगा कि उसकी अधिसूचना पोस्ट की जा रही है। यह अन्य संभावित समस्याओं की ओर ले जाता है, सभी संभव समाधान हैं जो मुझे लगता है कि आदर्श से कम हैं।

  1. सबसे पहले, पोस्टर को लग सकता है कि सर्वर पिछड़ रहा है और फिर से 'सबमिट' बटन पर क्लिक करें, जिससे स्क्रिप्ट दो बार शुरू या चालू हो जाएगी। मैं बटन को अक्षम करने के लिए जावास्क्रिप्ट का उपयोग करके इसे हल कर सकता हूं और पाठ को 'प्रोसेसिंग ...' जैसी किसी चीज को कहने के लिए बदल सकता हूं, हालांकि यह आदर्श से कम है क्योंकि उपयोगकर्ता अभी भी स्क्रिप्ट निष्पादन की लंबाई के लिए पेज पर अटक जाएगा। (इसके अलावा, यदि जावास्क्रिप्ट अक्षम है, यह समस्या अभी भी मौजूद है।)

  2. दूसरा, फॉर्म जमा करने के बाद पोस्टर समय से पहले टैब या ब्राउज़र को बंद कर सकता है। स्क्रिप्ट तब तक सर्वर पर चलती रहेगी, जब तक वह ब्राउज़र पर वापस लिखने की कोशिश नहीं करता है, हालांकि अगर उपयोगकर्ता तब हमारे डोमेन के भीतर किसी भी पेज पर पहुंचता है (जबकि स्क्रिप्ट अभी भी चल रही है), तो ब्राउज़र पेज को लोड होने तक लटका देता है जब तक कि स्क्रिप्ट समाप्त नहीं हो जाती। । (यह केवल तब होता है जब ब्राउज़र की एक टैब या विंडो बंद हो जाती है और संपूर्ण ब्राउज़र अनुप्रयोग नहीं।) फिर भी, यह आदर्श से कम है।

(संभव) समाधान
मैंने तय किया है कि मैं स्क्रिप्ट के "ईमेल" भाग को एक अलग फ़ाइल में तोड़ना चाहता हूं जिसे अधिसूचना पोस्ट होने के बाद मैं कॉल कर सकता हूं। मैंने मूल रूप से अधिसूचना के सफलतापूर्वक पोस्ट होने के बाद पुष्टि पृष्ठ पर इसे डालने के बारे में सोचा था। हालाँकि, उपयोगकर्ता को यह नहीं पता होगा कि यह स्क्रिप्ट चल रही है और कोई भी विसंगति उनके लिए स्पष्ट नहीं होगी; यह स्क्रिप्ट विफल नहीं हो सकती।

लेकिन, क्या होगा अगर मैं इस स्क्रिप्ट को पृष्ठभूमि प्रक्रिया के रूप में चला सकता हूं? तो, मेरा सवाल यह है: मैं एक पृष्ठभूमि सेवा के रूप में ट्रिगर करने के लिए एक PHP स्क्रिप्ट को कैसे निष्पादित कर सकता हूं और उपयोगकर्ता को फॉर्म स्तर पर क्या किया है, इसके बारे में पूरी तरह से स्वतंत्र है?

संपादित करें: यह क्रोन'एड नहीं हो सकता। यह प्रपत्र प्रस्तुत किया गया है तत्काल चलना चाहिए। ये उच्च प्राथमिकता वाले नोटिफिकेशन हैं। इसके अलावा, हमारे सर्वर चलाने वाले सिस्टम एडमिनिस्ट्रेटर क्रोन को 5 मिनट से अधिक बार चलाने से रोकते हैं।


क्रॉन जॉब शुरू करें और उपयोगकर्ता को दूसरे पेज पर अलर्ट करें कि उनके अनुरोध को संसाधित किया जा रहा है, या ऐसा कुछ।
इवान मुलवस्की 15

1
क्या आप इसे नियमित रूप से (हर दिन या हर घंटे) चलाना चाहते हैं या जमा करना चाहते हैं? मुझे लगता है कि आप php का उपयोग कर सकते हैं, exec()लेकिन मैंने कभी यह कोशिश नहीं की।
साइमन

2
मैं बस का उपयोग ajaxऔर डालने sleep()पाश अंदर समय अंतराल के साथ (मैं अपने मामले में foreach का उपयोग करें) पृष्ठभूमि प्रक्रिया को चलाने के लिए। यह मेरे सर्वर में पूरी तरह से काम करता है। दूसरों के बारे में निश्चित नहीं। मैं भी जोड़ा जा रहा ignore_user_abort()है और set_time_limit()पाश सुनिश्चित करें कि स्क्रिप्ट सर्वर मैं उपयोग के द्वारा बंद कर दिया नहीं किया जाएगा बनाने के लिए करने से पहले (गणना की समाप्ति समय के साथ), यहां तक कि अपने परीक्षण के अनुसार, स्क्रिप्ट के बिना कार्य पूरा ignore_user_abort()और set_time_limit()
अरी

मैंने देखा कि आप पहले से ही एक समाधान के साथ आए थे। मैं gearmanबैकग्राउंड टास्क से निपटने के लिए php का इस्तेमाल करता हूं । यदि आप बड़े समय प्रसंस्करण और भारी भार के साथ आए तो यह पैमाने के लिए एकदम सही है। आपको इस पर ध्यान देना चाहिए।
आंद्रे गार्सिया

[Stackoverflow] ( stackoverflow.com/a/46617107/6417678 ) पर इस उत्तर का पालन करें
जोशी फ्रांसिस

जवाबों:


89

के साथ कुछ प्रयोग करना execऔर shell_execमैंने एक ऐसे समाधान का खुलासा किया है जो पूरी तरह से काम करता है! मैं उपयोग करने का चयन करता shell_execहूं इसलिए मैं प्रत्येक अधिसूचना प्रक्रिया को लॉग कर सकता हूं जो होती है (या नहीं)। ( shell_execएक स्ट्रिंग के रूप में लौटता है और यह प्रयोग execकरने की तुलना में आसान था , एक चर के आउटपुट को असाइन करना और फिर लिखने के लिए एक फ़ाइल खोलना)।

मैं ईमेल स्क्रिप्ट को इनवॉइस करने के लिए निम्न लाइन का उपयोग कर रहा हूं:

shell_exec("/path/to/php /path/to/send_notifications.php '".$post_id."' 'alert' >> /path/to/alert_log/paging.log &");

&कमांड के अंत में नोटिस करना महत्वपूर्ण है (जैसा कि @netcoder द्वारा बताया गया है)। यह UNIX कमांड पृष्ठभूमि में एक प्रक्रिया चलाता है।

स्क्रिप्ट के लिए पथ के बाद एकल उद्धरणों में घिरे अतिरिक्त चर को उन $_SERVER['argv']चर के रूप में सेट किया जाता है जिन्हें मैं अपनी स्क्रिप्ट के भीतर कॉल कर सकता हूं।

ईमेल स्क्रिप्ट तब मेरी लॉग फ़ाइल में >>आउटपुट करती है और कुछ इस तरह आउटपुट करेगी:

[2011-01-07 11:01:26] Alert Notifications Sent for http://alerts.illinoisstate.edu/2049 (SCRIPT: 38.71 seconds)
[2011-01-07 11:01:34] CRITICAL ERROR: Alert Notifications NOT sent for http://alerts.illinoisstate.edu/2049 (SCRIPT: 23.12 seconds)

धन्यवाद। इससे मेरी जान बच गई।
लियाम बैली

वह क्या है जो $post_idphp स्क्रिप्ट के पथ के बाद है?
पेरोकैट

@Perocat यह एक वैरिएबल है जिसे आप स्क्रिप्ट पर भेज रहे हैं। इस मामले में यह एक आईडी भेज रहा है जो कि स्क्रिप्ट के लिए एक पैरामीटर कहा जाएगा।
चिक

मुझे संदेह है कि यह पूरी तरह से काम करता है, देखें stackoverflow.com/questions/2212635/…
सिम्बियन

1
भागने के लिए एक लंबित संपादन सुझाव है $post_id; मैं इसे सीधे एक नंबर पर डालूंगा (int) $post_id:। (यह ध्यान देने के लिए कि कौन बेहतर है, यह तय करने के लिए कॉल करना।)
Al.G.

19

लिनक्स / यूनिक्स सर्वर पर, आप proc_open का उपयोग करके पृष्ठभूमि में किसी कार्य को निष्पादित कर सकते हैं :

$descriptorspec = array(
   array('pipe', 'r'),               // stdin
   array('file', 'myfile.txt', 'a'), // stdout
   array('pipe', 'w'),               // stderr
);

$proc = proc_open('php email_script.php &', $descriptorspec, $pipes);

&महत्वपूर्ण बिट यहाँ किया जा रहा है। यदि मूल स्क्रिप्ट समाप्त हो गई है तो भी स्क्रिप्ट जारी रहेगी।


यह तब काम करता है जब मैं proc_closeकार्य पूरा होने पर कॉल नहीं करता । proc_closeस्क्रिप्ट को लगभग 15 से 25 सेकंड लटका देता है। मुझे पाइप जानकारी का उपयोग करके एक लॉग रखने की आवश्यकता होगी, इसलिए मुझे लिखने के लिए एक फ़ाइल खोलनी होगी, इसे बंद करना होगा, और फिर खरीद कनेक्शन बंद करना होगा। इसलिए, दुर्भाग्य से, यह समाधान मेरे लिए काम नहीं करता है।
माइकल Irigoyen

3
बेशक आप फोन नहीं करते proc_close, यह बात है! और हाँ, आप एक फ़ाइल के साथ पाइप कर सकते हैं proc_open। अद्यतन उत्तर देखें।
नेटकोडर

@netcoder: क्या होगा यदि मैं परिणाम को किसी फ़ाइल में संग्रहीत नहीं करना चाहता। stdout में क्या परिवर्तन आवश्यक हैं?
naggarwal11

9

सभी उत्तरों में से, किसी ने भी हास्यास्पद रूप से आसान fastcgi_finish_request फ़ंक्शन पर विचार नहीं किया , जिसे कहा जाता है, ब्राउज़र में सभी शेष आउटपुट को फ्लश करता है और बैकग्राउंड में स्क्रिप्ट को चलाने देते हुए Fastcgi सत्र और HTTP कनेक्शन को बंद कर देता है।

एक उदाहरण:

<?php
header('Content-Type: application/json');
echo json_encode(['ok' => true]);
fastcgi_finish_request(); // The user is now disconnected from the script

// do stuff with received data,

यह वही है जो मैं देख रहा था, शेल_सेक्स में मुझे किसी तरह पोस्ट किए गए डेटा को निष्पादित स्क्रिप्ट में स्थानांतरित करना होगा जो कि मेरे मामले में एक समय लेने वाला कार्य है और चीजों को बहुत जटिल बनाता है।
औरंगजेब

7

PHP exec("php script.php")कर सकते हैं।

से मैनुअल :

यदि इस फ़ंक्शन के साथ कोई प्रोग्राम शुरू किया जाता है, तो पृष्ठभूमि में इसे जारी रखने के लिए, प्रोग्राम के आउटपुट को फ़ाइल या किसी अन्य आउटपुट स्ट्रीम पर पुनर्निर्देशित किया जाना चाहिए। ऐसा करने में विफल रहने से PHP तब तक लटका रहेगा जब तक कि प्रोग्राम का निष्पादन समाप्त नहीं हो जाता।

इसलिए यदि आप आउटपुट को लॉग फ़ाइल में भेजते हैं (वैसे भी एक अच्छा विचार है), तो आपकी कॉलिंग स्क्रिप्ट नहीं लटकेगी और आपका ईमेल स्क्रिप्ट बीजी में चलेगा।


1
धन्यवाद, लेकिन यह काम नहीं किया। स्क्रिप्ट अभी भी "हैंग" होती है, जबकि यह दूसरी फाइल को प्रोसेस करती है।
माइकल इरिगॉयन

सराहें php.net/manual/en/function.exec.php#80582 पर देखें क्योंकि यह इसलिए है क्योंकि Safe_mode सक्षम है। यूनिक्स के तहत एक वर्कअराउंड है।
साइमन

दुर्भाग्य से, हमारी स्थापना पर सुरक्षित मोड सक्षम नहीं है। यह अजीब है कि यह अभी भी लटका हुआ है।
माइकल Irigoyen

6

और स्क्रिप्ट पर एक HTTP अनुरोध क्यों नहीं बना रहे हैं और प्रतिक्रिया को अनदेखा कर रहे हैं?

http://php.net/manual/en/function.httprequest-send.php

यदि आप स्क्रिप्ट पर अपना अनुरोध करते हैं, तो आपको अपने वेबसर्वर को कॉल करने की आवश्यकता है, इसे पृष्ठभूमि में चलाएंगे और आप (आपके मुख्य स्क्रिप्ट में) उपयोगकर्ता को यह बताते हुए एक संदेश दिखा सकते हैं कि स्क्रिप्ट चल रही है।


4

इस बारे में कैसा है?

  1. आपका PHP स्क्रिप्ट जो फॉर्म रखता है वह एक डेटाबेस या फ़ाइल में एक ध्वज या कुछ मान बचाता है।
  2. एक दूसरी PHP स्क्रिप्ट इस मान के लिए समय-समय पर सर्वेक्षण करती है और अगर यह सेट हो गई है, तो यह एक तुल्यकालिक तरीके से ईमेल स्क्रिप्ट को ट्रिगर करती है।

इस दूसरी PHP स्क्रिप्ट को क्रोन के रूप में चलाने के लिए सेट किया जाना चाहिए।


धन्यवाद, लेकिन मैंने मूल प्रश्न को अपडेट कर दिया है। क्रोन इस मामले में एक विकल्प नहीं हैं।
माइकल Irigoyen

4

जैसा कि मुझे पता है कि आप इसे आसान तरीके से नहीं कर सकते हैं (कांटा निष्पादन आदि (विंडोज़ के तहत काम न करें) देखें), हो सकता है कि आप दृष्टिकोण को उल्टा कर सकते हैं, अजाक्स में फ़ॉर्म पोस्ट करने वाले ब्राउज़र की पृष्ठभूमि का उपयोग करें, इसलिए यदि पोस्ट अभी भी है आपके पास कोई प्रतीक्षा समय नहीं है
यहां तक ​​कि अगर आपको कुछ लंबा विस्तार करना है तो भी यह मदद कर सकता है।

मेल भेजने के बारे में यह हमेशा एक स्पूलर का उपयोग करने का सुझाव देता है, एक स्थानीय और त्वरित smtp सर्वर हो सकता है जो आपके अनुरोधों को स्वीकार करता है और उन्हें असली MTA में स्पूल करता है या क्यूबी स्पूल करने वाले क्रोन का उपयोग करने की तुलना में सभी को डीबी में डाल देता है।
क्रोन एक अन्य मशीन पर हो सकता है जो स्पूलर को बाहरी यूआरएल कह रहा है:

* * * * * wget -O /dev/null http://www.example.com/spooler.php

3

बैकग्राउंड क्रॉन जॉब इसके लिए एक अच्छे आइडिया की तरह लगता है।

स्क्रिप्ट को क्रोन के रूप में चलाने के लिए आपको मशीन तक पहुंच की आवश्यकता होगी।

$ php scriptname.php इसे चलाने के लिए।


1
ssh के लिए कोई ज़रूरत नहीं है। कई मेजबान ssh को अस्वीकार करते हैं, लेकिन क्रोन-समर्थन करते हैं।
टेसन

धन्यवाद, लेकिन मैंने मूल प्रश्न को अपडेट कर दिया है। क्रोन इस मामले में एक विकल्प नहीं हैं।
माइकल इरिगॉयन

3

यदि आप सर्वर को ssh पर एक्सेस कर सकते हैं और अपनी स्वयं की स्क्रिप्ट चला सकते हैं तो आप php का उपयोग करके एक साधारण फेनो सर्वर बना सकते हैं (हालाँकि आपको इसके लिए posixसमर्थन के साथ php को फिर से जोड़ना होगा fork)।

सर्वर वास्तव में कुछ भी लिखा जा सकता है, आप शायद इसे आसानी से अजगर में कर सकते हैं।

या सबसे सरल समाधान एक HttpRequest भेजना और रिटर्न डेटा पढ़ना नहीं होगा, लेकिन प्रसंस्करण समाप्त होने से पहले सर्वर स्क्रिप्ट को नष्ट कर सकता है।

उदाहरण सर्वर:

<?php
define('FIFO_PATH', '/home/user/input.queue');
define('FORK_COUNT', 10);

if(file_exists(FIFO_PATH)) {
    die(FIFO_PATH . ' exists, please delete it and try again.' . "\n");
}

if(!file_exists(FIFO_PATH) && !posix_mkfifo(FIFO_PATH, 0666)){
    die('Couldn\'t create the listening fifo.' . "\n");
}

$pids = array();
$fp = fopen(FIFO_PATH, 'r+');
for($i = 0; $i < FORK_COUNT; ++$i) {
    $pids[$i] = pcntl_fork();
    if(!$pids[$i]) {
        echo "process(" . posix_getpid() . ", id=$i)\n";
        while(true) {
            $line = chop(fgets($fp));
            if($line == 'quit' || $line === false) break;
            echo "processing (" . posix_getpid() . ", id=$i) :: $line\n";
        //  $data = json_decode($line);
        //  processData($data);
        }
        exit();
    }
}
fclose($fp);
foreach($pids as $pid){
    pcntl_waitpid($pid, $status);
}
unlink(FIFO_PATH);
?>

उदाहरण ग्राहक:

<?php
define('FIFO_PATH', '/home/user/input.queue');
if(!file_exists(FIFO_PATH)) {
    die(FIFO_PATH . ' doesn\'t exist, please make sure the fifo server is running.' . "\n");
}

function postToQueue($data) {
    $fp = fopen(FIFO_PATH, 'w+');
    stream_set_blocking($fp, false); //don't block
    $data = json_encode($data) . "\n";
    if(fwrite($fp, $data) != strlen($data)) {
        echo "Couldn't the server might be dead or there's a bug somewhere\n";
    }
    fclose($fp);
}
$i = 1000;
while(--$i) {
    postToQueue(array('xx'=>21, 'yy' => array(1,2,3)));
}
?>

3

बैकग्राउंड में PHP स्क्रिप्ट चलाने का सबसे सरल तरीका है

php script.php >/dev/null &

स्क्रिप्ट बैकग्राउंड में चलेगी और पेज भी तेजी से एक्शन पेज तक पहुंचेगा।


2

मान लें कि आप एक * nix प्लेटफॉर्म, उपयोग cronऔर phpनिष्पादन योग्य पर चल रहे हैं ।

संपादित करें:

पहले से ही SO पर "बिना cron के php चलाने" के लिए काफी सवाल पूछे जा रहे हैं। यहां एक है:

CRON का उपयोग किए बिना स्क्रिप्ट शेड्यूल करें

उस ने कहा, ऊपर () जवाब बहुत ही आशाजनक लगता है :)


धन्यवाद, लेकिन मैंने मूल प्रश्न को अपडेट कर दिया है। क्रोन इस मामले में एक विकल्प नहीं हैं।
माइकल Irigoyen

2

यदि आप विंडोज पर हैं, तो शोध proc_openया popen...

लेकिन अगर हम एक ही सर्वर "लिनक्स" पर चल रहे हैं तो यह सही दृष्टिकोण है:

#!/usr/bin/php 
<?php
$pid = shell_exec("nohup nice php -f            
'path/to/your/script.php' /dev/null 2>&1 & echo $!");
While(exec("ps $pid"))
{ //you can also have a streamer here like fprintf,        
 // or fgets
}
?>

उपयोग न करें fork()या curlयदि आपको संदेह है कि आप उन्हें संभाल सकते हैं, तो यह आपके सर्वर का दुरुपयोग करने जैसा है

अंत में, जिस script.phpफ़ाइल को ऊपर कहा गया है, इस पर ध्यान दें कि आपने क्या लिखा है:

<?php
ignore_user_abort(TRUE);
set_time_limit(0);
ob_start();
// <-- really optional but this is pure php

//Code to be tested on background

ob_flush(); flush(); 
//this two do the output process if you need some.        
//then to make all the logic possible


str_repeat(" ",1500); 
//.for progress bars or loading images

sleep(2); //standard limit

?>

मेरे मोबाइल फोन का उपयोग करके im के लिए इसे बाद में संपादित करने के लिए क्षमा करें और वास्तव में यह निष्पादन () स्क्रिप्ट लिखने की तुलना में अधिक कठिन है। लोल;)
मैं आर्बज़

2

बैकग्राउंड वर्कर के लिए मुझे लगता है कि आपको इस तकनीक को आज़माना चाहिए क्योंकि यह उन सभी पृष्ठों को कॉल करने में मदद करेगा, जिन्हें आप पसंद करते हैं, सभी पेज एक बार में स्वतंत्र रूप से बिना किसी पेज की प्रतिक्रिया के अतुल्यकालिक रूप से चलेंगे।

form_action_page.php

     <?php

    post_async("http://localhost/projectname/testpage.php", "Keywordname=testValue");
    //post_async("http://localhost/projectname/testpage.php", "Keywordname=testValue2");
    //post_async("http://localhost/projectname/otherpage.php", "Keywordname=anyValue");
    //call as many as pages you like all pages will run at once //independently without waiting for each page response as asynchronous.

  //your form db insertion or other code goes here do what ever you want //above code will work as background job this line will direct hit before //above lines response     
                ?>
                <?php

                /*
                 * Executes a PHP page asynchronously so the current page does not have to wait for it to     finish running.
                 *  
                 */
                function post_async($url,$params)
                {

                    $post_string = $params;

                    $parts=parse_url($url);

                    $fp = fsockopen($parts['host'],
                        isset($parts['port'])?$parts['port']:80,
                        $errno, $errstr, 30);

                    $out = "GET ".$parts['path']."?$post_string"." HTTP/1.1\r\n";//you can use POST instead of GET if you like
                    $out.= "Host: ".$parts['host']."\r\n";
                    $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
                    $out.= "Content-Length: ".strlen($post_string)."\r\n";
                    $out.= "Connection: Close\r\n\r\n";
                    fwrite($fp, $out);
                    fclose($fp);
                }
                ?>

testpage.php

    <?
    echo $_REQUEST["Keywordname"];//case1 Output > testValue
//here do your background operations it will not halt main page
    ?>

PS: यदि आप url पैरामीटर को लूप के रूप में भेजना चाहते हैं तो इस उत्तर का अनुसरण करें: https://stackoverflow.com/a/41225209/6295712


0

मेरे मामले में मेरे पास 3 पैरा हैं, उनमें से एक स्ट्रिंग है (मेन्साजे):

exec("C:\wamp\bin\php\php5.5.12\php.exe C:/test/N/trunk/api/v1/Process.php $idTest2 $idTest3 \"$mensaje\" >> c:/log.log &");

मेरे Process.php में मेरे पास यह कोड है:

if (!isset($argv[1]) || !isset($argv[2]) || !isset($argv[3]))
{   
    die("Error.");
} 

$idCurso = $argv[1];
$idDestino = $argv[2];
$mensaje = $argv[3];

0

यह मेरे लिए काम करता है। इस tyr

exec(“php asyn.php”.” > /dev/null 2>/dev/null &“);

क्या होगा अगर मेरे पास पोस्ट मान हैं? एक फॉर्म से और मैं इसे अजाक्स और serialize()फ़ंक्शन के माध्यम से भेजता हूं । उदाहरण के लिए, मेरे पास index.php फॉर्म है और मैं ajax के माध्यम से index2.php पर मूल्य भेजता हूं। मैं index2.php में डेटा भेजने की पृष्ठभूमि में प्रदर्शन करना चाहता हूं जो आप सुझाते हैं? धन्यवाद
जेए

0

समानांतर और अतुल्यकालिक रूप से नौकरियों को निष्पादित करने के लिए Amphp का उपयोग करें ।

पुस्तकालय स्थापित करें

composer require amphp/parallel-functions

कोड नमूना

<?php

require "vendor/autoload.php";

use Amp\Promise;
use Amp\ParallelFunctions;


echo 'started</br>';

$promises[1] = ParallelFunctions\parallel(function (){
    // Send Email
})();

$promises[2] = ParallelFunctions\parallel(function (){
    // Send SMS
})();


Promise\wait(Promise\all($promises));

echo 'finished';

अपने उपयोग के मामले को फ़ॉइल करें, आप नीचे जैसा कुछ कर सकते हैं

<?php

use function Amp\ParallelFunctions\parallelMap;
use function Amp\Promise\wait;

$responses = wait(parallelMap([
    'a@example.com',
    'b@example.com',
    'c@example.com',
], function ($to) {
    return send_mail($to);
}));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.