কোনও ফর্ম জমা দেওয়ার পরে আমি কীভাবে পিএইচপি স্ক্রিপ্টটি চালাতে পারি?


104

সমস্যা
আমার একটি ফর্ম রয়েছে যা জমা দেওয়া হলে, জমা দেওয়া তথ্যগুলি প্রক্রিয়াকরণের জন্য বেসিক কোডটি চালাবে এবং কোনও বিজ্ঞপ্তি ওয়েবসাইটে প্রদর্শনের জন্য এটি একটি ডাটাবেসে সন্নিবেশ করবে। এছাড়াও, আমার কাছে ইমেল এবং এসএমএস বার্তার মাধ্যমে এই বিজ্ঞপ্তিগুলি পেতে সাইন আপ করা ব্যক্তিদের একটি তালিকা রয়েছে। এই তালিকাটি মুহূর্ত হিসাবে তুচ্ছ (কেবলমাত্র দেড়শো ধাক্কা দিচ্ছে), তবে এটি গ্রাহকদের পুরো টেবিলের মধ্যে দিয়ে এক মিনিটের বেশি সময় নেয় এবং 150+ ইমেল প্রেরণ করতে পারে তাই যথেষ্ট। (গণ ইমেল নীতিগুলির কারণে আমাদের ইমেল সার্ভারের সিস্টেম প্রশাসকদের অনুরোধ অনুসারে ইমেলগুলি পৃথকভাবে প্রেরণ করা হচ্ছে))

এই সময়ে, সতর্কতা পোস্টকারী ব্যক্তি তার বিজ্ঞপ্তি পোস্ট করা হচ্ছে এমন কোনও ইতিবাচক শক্তিবৃদ্ধি ছাড়াই প্রায় এক মিনিটের জন্য ফর্মের শেষ পৃষ্ঠায় বসে থাকবে। এটি অন্যান্য সম্ভাব্য সমস্যার দিকে নিয়ে যায়, আমার মনে হয় এমন সম্ভাব্য সমাধানগুলি আদর্শের চেয়ে কম।

  1. প্রথমত, পোস্টারটি মনে করতে পারে যে সার্ভারটি পিছিয়ে যাচ্ছে এবং আবার 'জমা দিন' বোতামটি ক্লিক করুন, যার ফলে স্ক্রিপ্টটি আবার শুরু হবে বা দুবার চালিত হবে। আমি জাভাস্ক্রিপ্ট ব্যবহার করে বোতামটি অক্ষম করতে এবং পাঠ্যটিকে 'প্রসেসিং ...' এর মতো কিছু বলার বদলে সমাধান করতে পারি, তবে এটি আদর্শের চেয়ে কম নয় কারণ ব্যবহারকারী এখনও স্ক্রিপ্টের প্রয়োগের দৈর্ঘ্যের জন্য পৃষ্ঠায় আটকে থাকবে। (এছাড়াও, যদি জাভাস্ক্রিপ্ট অক্ষম করা থাকে তবে এই সমস্যাটি এখনও বিদ্যমান))

  2. দ্বিতীয়ত, পোস্টারটি ফর্ম জমা দেওয়ার পরে অকাল আগেই ট্যাব বা ব্রাউজারটি বন্ধ করে দিতে পারে। স্ক্রিপ্টটি সার্ভারে চলমান থাকবে যতক্ষণ না এটি ব্রাউজারে আবার লেখার চেষ্টা করে তবে ব্যবহারকারী যদি আমাদের ডোমেনের মধ্যে কোনও পৃষ্ঠাতে ব্রাউজ করে (স্ক্রিপ্টটি এখনও চলমান থাকে), স্ক্রিপ্টটি শেষ না হওয়া পর্যন্ত ব্রাউজারটি পৃষ্ঠাটি লোড করে ঝুলিয়ে রাখে । (এটি তখনই ঘটে যখন ব্রাউজারের কোনও ট্যাব বা উইন্ডোটি সম্পূর্ণ ব্রাউজার অ্যাপ্লিকেশনটি বন্ধ না হয়ে থাকে not) তবুও, এটি আদর্শের চেয়ে কম নয়।

(সম্ভাব্য) সমাধান
আমি সিদ্ধান্ত নিয়েছি আমি নোটিফিকেশন পোস্ট হওয়ার পরে কল করতে পারি একটি পৃথক ফাইলে স্ক্রিপ্টের "ইমেল" অংশটি ছিন্ন করতে চাই। বিজ্ঞপ্তিটি সফলভাবে পোস্ট হওয়ার পরে আমি মূলত এটি নিশ্চিতকরণ পৃষ্ঠায় রাখার কথা ভেবেছিলাম। তবে, ব্যবহারকারীরা জানতে পারবেন না যে এই স্ক্রিপ্টটি চলছে এবং কোনও অসঙ্গতি তাদের কাছে প্রকাশিত হবে না; এই স্ক্রিপ্ট ব্যর্থ হতে পারে।

তবে, আমি যদি এই স্ক্রিপ্টটি পটভূমি প্রক্রিয়া হিসাবে চালাতে পারি? সুতরাং, আমার প্রশ্নটি হ'ল: আমি কীভাবে একটি পিএইচপি স্ক্রিপ্ট কার্যকর করতে পারি যে পটভূমির পরিষেবা হিসাবে ট্রিগার করতে এবং ব্যবহারকারীর ফর্ম পর্যায়ে যা করেছেন তার থেকে সম্পূর্ণ স্বাধীন চালাতে পারি?

সম্পাদনা: এটি ক্রোন করা যাবে না । এটি তাত্ক্ষণিকভাবে চালানো উচিত ফর্মটি জমা দেওয়া হয়েছে। এগুলি উচ্চ-অগ্রাধিকারের বিজ্ঞপ্তি। এছাড়াও, আমাদের সার্ভারগুলিতে পরিচালিত সিস্টেম প্রশাসকরা 5 মিনিটেরও বেশি বার বার ক্রোন চালানোর অনুমতি দেয় না।


ক্রোন জব শুরু করুন এবং ব্যবহারকারীকে অন্য পৃষ্ঠায় সতর্ক করুন যে তাদের অনুরোধটি প্রক্রিয়া করা হচ্ছে, বা এ জাতীয় কিছু।
ইভান মুলাওস্কি

1
আপনি কি এটি নিয়মিত (প্রতিদিন বা প্রতি ঘন্টা বা ঘন্টা) চালাতে চান বা জমা দিতে চান? আমার ধারণা আপনি পিএইচপি ব্যবহার করতে পারেন exec()তবে আমি কখনই এটি ব্যবহার করে দেখিনি।
সাইমন 15

2
আমি ব্যাকগ্রাউন্ড প্রক্রিয়া চালানোর জন্য লুপের অভ্যন্তরে সময় ব্যবধান সহ আমি কেবল ব্যবহার করি ajaxএবং সন্নিবেশ sleep()করান (আমি আমার ক্ষেত্রে ফরচ ব্যবহার করি) এটি আমার সার্ভারে পুরোপুরি কাজ করে। অন্যদের সম্পর্কে নিশ্চিত নয়। আমি এটি যোগ করছি ignore_user_abort()এবং set_time_limit()(গণনা করা শেষ সময় সহ) লুপের আগে এটি নিশ্চিত করতে যে আমি যে সার্ভারটি ব্যবহার করি তা দ্বারা স্ক্রিপ্টটি বন্ধ হবে না, এমনকি আমার পরীক্ষার অনুসারে, স্ক্রিপ্টটি ছাড়া ignore_user_abort()এবং টাস্কটি সম্পূর্ণ করে set_time_limit()
এরি

আমি দেখেছি আপনি ইতিমধ্যে একটি সমাধান নিয়ে এসেছেন। আমি gearmanপিএইচপি ব্যবহার করে পটভূমি কাজগুলি মোকাবেলা করতে। আপনি বড় সময় প্রক্রিয়াজাতকরণ এবং ভারী বোঝা নিয়ে এসে পৌঁছলে এটি স্কেল করা নিখুঁত। আপনার এটি একবার দেখা উচিত।
আন্দ্রে গার্সিয়া

[স্ট্যাকওভারফ্লো] এ উত্তরটি অনুসরণ করুন ( স্ট্যাকওভারফ্লো.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 &");

&কমান্ডের শেষে লক্ষ্য করা গুরুত্বপূর্ণ (@ নেটকোডার দ্বারা চিহ্নিত হিসাবে) important এই ইউনিক্স কমান্ড পটভূমিতে একটি প্রক্রিয়া চালায়।

স্ক্রিপ্টের পথের পরে একক উদ্ধৃতিতে ঘেরা অতিরিক্ত ভেরিয়েবলগুলি ভেরিয়েবল হিসাবে সেট করা $_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_idপিএইচপি স্ক্রিপ্টের পথের পরে এটি কী ?
পেরোক্যাট

@ পেরোক্যাট এটি একটি পরিবর্তনশীল যা আপনি স্ক্রিপ্টে প্রেরণ করছেন। এই ক্ষেত্রে এটি একটি আইডি প্রেরণ করছে যা কল করা স্ক্রিপ্টের প্যারামিটার হবে।
চিক

আমার সন্দেহ এই পুরোপুরি কাজ করে দেখুন stackoverflow.com/questions/2212635/...
symcbean

1
পালানোর জন্য এখানে মুলতুবি সম্পাদনার পরামর্শ রয়েছে $post_id; আমি বরং এটা সরাসরি একটি সংখ্যা কাস্ট হবে: (int) $post_id। (কোনটি ভাল তা সিদ্ধান্ত নেওয়ার জন্য আপনার মনোযোগের জন্য আহ্বান
জানানো

19

লিনাক্স / ইউনিক্স সার্ভারগুলিতে, আপনি প্র্যাক-ওপেন ব্যবহার করে পটভূমিতে একটি কাজ সম্পাদন করতে পারেন :

$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 সেকেন্ড স্থির করে দেয়। পাইপের তথ্য ব্যবহার করে আমার একটি লগ রাখতে হবে, তাই আমাকে লিখিতভাবে ফাইলটি খুলতে হবে, এটি বন্ধ করতে হবে এবং তারপরে প্রোক সংযোগটি বন্ধ করতে হবে। সুতরাং, দুর্ভাগ্যক্রমে, এই সমাধানটি আমার পক্ষে কার্যকর হয় না।
মাইকেল ইরিগয়েন

3
অবশ্যই আপনি ফোন করবেন না proc_close, এটাই কথা! এবং হ্যাঁ, আপনি কোনও ফাইলটি পাইপ করতে পারেন proc_open। আপডেট উত্তর দেখুন।
নেটকোডার

@ নেটকোডার: আমি যদি কোনও ফাইলে ফলাফল সংরক্ষণ করতে না চাই তবে কী হবে। স্টাডাউটে কি পরিবর্তন প্রয়োজন?
naggarwal11

9

সমস্ত জবাবগুলির মধ্যে, হাস্যকরভাবে সহজেই কেউ দ্রুত বিবেচনা করে না, দ্রুতcc_finish_request ফাংশন, যাকে বলা হয়, ব্রাউজারে অবশিষ্ট সমস্ত আউটপুট ফ্লাশ করে এবং ফাস্টস্কি সেশন এবং এইচটিটিপি সংযোগ বন্ধ করে দেয়, স্ক্রিপ্টটিকে ব্যাকগ্রাউন্ডে চালিত করার সময়।

একটি উদাহরণ:

<?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

পিএইচপি exec("php script.php")এটি করতে পারে।

ম্যানুয়াল থেকে :

যদি কোনও প্রোগ্রাম এই ফাংশন দিয়ে শুরু করা হয়, এটি পটভূমিতে চলতে থাকে, প্রোগ্রামের আউটপুটটি কোনও ফাইল বা অন্য কোনও আউটপুট প্রবাহে পুনঃনির্দেশ করতে হবে। এটি করতে ব্যর্থ হওয়ার ফলে পিএইচপি এই প্রোগ্রামটির সম্পাদন শেষ না হওয়া পর্যন্ত স্তব্ধ হয়ে যাবে।

সুতরাং আপনি যদি কোনও লগ ফাইলের আউটপুট পুনর্নির্দেশ করেন (যাইহোক ভাল ধারণাটি কী) তবে আপনার কলিং স্ক্রিপ্টটি স্তব্ধ হবে না এবং আপনার ইমেল স্ক্রিপ্টটি বিজি তে চলবে।


1
ধন্যবাদ, তবে এটি কার্যকর হয়নি। দ্বিতীয় ফাইলটি প্রক্রিয়া করার সময় স্ক্রিপ্টটি এখনও "স্তব্ধ" থাকে।
মাইকেল ইরিগয়েন

প্রশংসাপত্রটি দেখুন php.net/manual/en/function.exec.php#80582 সেফ_মোড সক্ষম হওয়া বলে মনে হচ্ছে। ইউনিক্সের অধীনে একটি কার্যকারিতা রয়েছে।
সাইমন

দুর্ভাগ্যক্রমে, আমাদের ইনস্টলেশনতে নিরাপদ মোড সক্ষম নয়। এটি আজও ঝুলন্ত এটি অদ্ভুত।
মাইকেল ইরিগয়েন

6

এবং স্ক্রিপ্টে এইচটিটিপি অনুরোধ করা এবং প্রতিক্রিয়া উপেক্ষা করে কেন নয়?

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

আপনি যদি স্ক্রিপ্টে আপনার অনুরোধটি করেন তবে আপনার ওয়েবসার্ভারটি কল করতে হবে এটি পটভূমিতে চালিত হবে এবং আপনি (আপনার মূল স্ক্রিপ্টে) কোনও বার্তা প্রদর্শন করতে পারবেন যা ব্যবহারকারীকে জানাচ্ছেন যে স্ক্রিপ্টটি চলছে।


4

এ কেমন?

  1. আপনার পিএইচপি স্ক্রিপ্ট যা ফর্মটি ধারণ করে তা একটি পতাকা বা কিছু মান একটি ডাটাবেস বা ফাইলে সংরক্ষণ করে ves
  2. সময় সময় এই মানটির জন্য একটি দ্বিতীয় পিএইচপি স্ক্রিপ্ট পোল করে এবং এটি সেট করা থাকলে এটি ইমেল স্ক্রিপ্টটিকে একটি সিঙ্ক্রোনাস পদ্ধতিতে ট্রিগার করে।

এই দ্বিতীয় পিএইচপি স্ক্রিপ্টটি ক্রোন হিসাবে চালানোর জন্য সেট করা উচিত।


আপনাকে ধন্যবাদ, তবে আমি আসল প্রশ্নটি আপডেট করেছি। ক্রোন এর ক্ষেত্রে কোনও বিকল্প নয়।
মাইকেল ইরিগয়েন

4

আমি জানি যে আপনি এটি সহজ উপায়ে করতে পারবেন না (কাঁটাচামচ এক্সেক ইত্যাদি দেখুন (উইন্ডোগুলির নীচে কাজ করবেন না)), আপনি যদি পদ্ধতির বিপরীত করতে পারেন, এজ্যাকারে ফর্মটি পোস্ট করে ব্রাউজারের পটভূমি ব্যবহার করতে পারেন, তাই যদি পোস্টটি এখনও থাকে কাজ আপনি কোন অপেক্ষা অপেক্ষা সময়।
আপনাকে কিছুটা দীর্ঘতর বিস্তৃতি করতে হলেও এটি সহায়তা করতে পারে।

মেল প্রেরণের বিষয়ে এটি সর্বদা একটি স্পুলার ব্যবহার করার পরামর্শ দেয়, এটি একটি স্থানীয় এবং দ্রুত এসএমটিপি সার্ভার হতে পারে যা আপনার অনুরোধগুলি গ্রহণ করে এবং এগুলি সত্যিকারের এমটিএতে স্পুল করে দেয় বা সারিটি স্পুল করে এমন ক্রোন ব্যবহার না করে সমস্ত ডিবিতে রাখে।
ক্রোন স্পোলারটিকে বাহ্যিক ইউআরএল হিসাবে কল করে অন্য কোনও মেশিনে থাকতে পারে:

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

3

ব্যাকগ্রাউন্ড ক্রোন জব এর জন্য ভাল ধারণা বলে মনে হচ্ছে।

ক্রোন হিসাবে স্ক্রিপ্টটি চালানোর জন্য আপনার মেশিনে ssh অ্যাক্সেস প্রয়োজন।

$ php scriptname.php এটি চালাতে।


1
ssh জন্য কোন প্রয়োজন নেই। অনেক হোস্ট শ্যাশকে অস্বীকার করে তবে ক্রোন-সমর্থন রয়েছে।
টেসন

আপনাকে ধন্যবাদ, তবে আমি আসল প্রশ্নটি আপডেট করেছি। ক্রোন এর ক্ষেত্রে কোনও বিকল্প নয়।
মাইকেল ইরিগয়েন

3

আপনি যদি সার্ভারটি ssh এর মাধ্যমে অ্যাক্সেস করতে এবং নিজের স্ক্রিপ্টগুলি চালনা করতে পারেন তবে আপনি পিএইচপি ব্যবহার করে একটি সাধারণ ফিফো সার্ভার তৈরি করতে পারেন (যদিও আপনাকে posixসমর্থন সহ পিএইচপি পুনরায় সংযোগ করতে হবে fork) support

সার্ভারটি সত্যিই যে কোনও কিছুতে লেখা যেতে পারে, আপনি সম্ভবত এটি অজগরকে সহজেই করতে পারেন।

অথবা সবচেয়ে সহজ সমাধান হ'ল এইচটিপিআরকোয়েস্ট প্রেরণ করা এবং রিটার্নের ডেটা না পড়লেও এটি প্রক্রিয়া শেষ করার আগে সার্ভার স্ক্রিপ্টটি নষ্ট করতে পারে।

সার্ভার উদাহরণ:

<?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 script.php >/dev/null &

স্ক্রিপ্টটি পটভূমিতে চলবে এবং পৃষ্ঠাটি দ্রুত অ্যাকশন পৃষ্ঠাতেও পৌঁছে যাবে।


2

ধরে নিচ্ছি যে আপনি একটি * নিক্স প্ল্যাটফর্মে চলছে, ব্যবহার করুন cronএবং phpএক্সিকিউটেবল।

সম্পাদনা করুন:

ইতিমধ্যে এসওতে "ক্রোন ছাড়াই পিএইচপি চালানো" জন্য বেশ কয়েকটি প্রশ্ন জিজ্ঞাসা করছে। এখানে একটি:

সিআরএন ব্যবহার না করে স্ক্রিপ্টগুলির শিডিয়ুল করুন

এটি বলেছে, উপরের এক্সিকিউটিভ () উত্তরটি খুব আশাব্যঞ্জক মনে হচ্ছে :)


আপনাকে ধন্যবাদ, তবে আমি আসল প্রশ্নটি আপডেট করেছি। ক্রোন এর ক্ষেত্রে কোনও বিকল্প নয়।
মাইকেল ইরিগয়েন

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

?>

পরবর্তীকালে আমার মোবাইল ফোনটি ব্যবহার করার জন্য এটি সম্পাদনার জন্য দুঃখিত এবং প্রকৃতপক্ষে এটি একটি এক্সিকিউট () স্ক্রিপ্ট লেখার চেয়ে আরও বেশি শক্ত way লল;)
আমি আরবিজেড

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
    ?>

পিএস: আপনি যদি লুপ হিসাবে ইউআরএল প্যারামিটারগুলি প্রেরণ করতে চান তবে এই উত্তরটি অনুসরণ করুন: 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 &");

আমার প্রসেস.এফপিতে আমার এই কোডটি রয়েছে:

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 সাথে ফর্ম আছে এবং আমি এজাক্সের মাধ্যমে সূচক 2.php এ মূল্য প্রেরণ করি আমি ব্যাকগ্রাউন্ডে index2.php এ ডেটা প্রেরণ সম্পাদন করতে চাই আপনি কী পরামর্শ দিচ্ছেন? ধন্যবাদ
খালিদ জে

0

সমান্তরাল এবং অবিচ্ছিন্নভাবে কাজগুলি সম্পাদন করতে অ্যাম্প্প ব্যবহার করুন ।

গ্রন্থাগারটি ইনস্টল করুন

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);
}));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.