PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : اجرای اسکریپت PHP توسط کرون جاب CPanel



mehran-b
August 8th, 2017, 00:21
سلام بر همه

همون طور که احتمالا همه میدونید اسکریپت PHP رو به دو شکل میشه توی CPanel در بخش Cronjob اجرا کرد.




/usr/bin/php -q /home/username/public_html/script.php



و حالت دوم:




/usr/bin/curl http://example.com/script.php



البته حالت دوم رو میشه با wget هم پیاده کرد.

تفاوتی که من بین اینا میبینم توی حالت اول فایل php به صورت داخلی اجرا میشه ولی در حالت دوم با درخواست HTTP اجرا میشه.

حالت سوال اینه که تفاوت های دیگر این دو حالت چیه؟

تشکر

omid1991
August 8th, 2017, 02:02
سلام بر همه

همون طور که احتمالا همه میدونید اسکریپت PHP رو به دو شکل میشه توی CPanel در بخش Cronjob اجرا کرد.




/usr/bin/php -q /home/username/public_html/script.php



و حالت دوم:




/usr/bin/curl http://example.com/script.php



البته حالت دوم رو میشه با wget هم پیاده کرد.

تفاوتی که من بین اینا میبینم توی حالت اول فایل php به صورت داخلی اجرا میشه ولی در حالت دوم با درخواست HTTP اجرا میشه.

حالت سوال اینه که تفاوت های دیگر این دو حالت چیه؟

تشکر

سلام وقت بخیر

جواب خیلی سادست

با آدرس داخلی میشه امنیت کد رو فراهم کرد
فایل رو خارج از دایرکتوری اصلی میزارید دیگه لود خارجی نمیشه



/usr/bin/php -q /home/Cronjob/script.php

mehran-b
August 8th, 2017, 02:14
سلام وقت بخیر

جواب خیلی سادست

با آدرس داخلی میشه امنیت کد رو فراهم کرد
فایل رو خارج از دایرکتوری اصلی میزارید دیگه لود خارجی نمیشه



/usr/bin/php -q /home/Cronjob/script.php

به نکته خوبی اشاره کردید.
توی آدرس داخلی timeout داریم مانند حالت خارجی یا خیر؟

TheHost
August 8th, 2017, 02:15
این توضیح مورد نیاز شما به انگلیسی , جواب شما رو هایلایت کردم.

General cron job format is as follows:

[path to environment] [Path to script] [Script parameters]


For example, if you want to run a PHP script located in the public_html directory, the correct cron command will be:

/usr/local/bin/php /home/cPaneluser/public_html/yourscript.php


or if you want to use a relative path (different commands are divided by “;”):

cd /home/YourcPuser/public_html/; /usr/local/bin/php yourscript.php


For Python and Perl scripts, there is no need to use a full path to the environment, the environment interpreter directive will be enough on shared servers.

python /home/YourcPuser/public_html/yourscript.py

perl /home/YourcPuser/public_html/yourscript.pl


Alternatively, you can just use curl request as the cron job command for the same purpose:

curl “http://yourdomain.com/script.php?argument1=arg1&argument2=arg2”
curl “http://yourdomain.com/script.py”
curl “http://yourdomain.com/script.pl”

However, unlike the first method, curl-based cron jobs will work only if URLs specified in curl requests are resolving, e.g., DNS records for the domain are correct and running.

omid1991
August 8th, 2017, 03:20
به نکته خوبی اشاره کردید.
توی آدرس داخلی timeout داریم مانند حالت خارجی یا خیر؟
تایم اوتی که curl داره با تایم اوت سرور فرق داره تو حالت داخلی بستگی به کانفیگ سرورتون داره بهترین حالت کرون جاب حالت داخلی هست
یخورده کار کنید خودتون به نتایج جالبی میرسید ;)

mehran-b
August 9th, 2017, 12:51
تشکر بابت راهنمایی هایی که انجام دادید.

فقط یه سوال فنی برام پیش اومد وقتی با curl فایل php رو اجرا میکنی curl دقیقا مثل یه مرورگر صبر میکنه تا اجرای فایل تموم بشه یا نه فقط بازش میکنه؟

omid1991
August 9th, 2017, 13:18
تشکر بابت راهنمایی هایی که انجام دادید.

فقط یه سوال فنی برام پیش اومد وقتی با curl فایل php رو اجرا میکنی curl دقیقا مثل یه مرورگر صبر میکنه تا اجرای فایل تموم بشه یا نه فقط بازش میکنه؟

سلام وقت بخیر

بله باید کامل اجرا بشه بستگی به کدتون داره

ببنید تقریبا همه درخواست های http, https با curl انجام میشه
مثال همین درگاه های بانکی همشون با curl کار میکنند

پ.ن : حالا یکی پیدا میشه میگه این چه حرفیه پس soap چیه soap هم یه کلاس هست مثل خیلی از کلاس هایی که خودتون مینویسید مثلا این کلاس


class Oa
{
public function oCurl($url='', $data=[], $timeout=20, $header=false)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if(!empty($data))
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
if($header)
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);


$res = curl_exec($ch);
curl_close($ch);


return $res;
}
}

safaeean
August 9th, 2017, 13:52
کرون جاب با curl و wget بدون دامنه هم اجرا نمیشن ولی php میشه
امکانش هست با دستور php فایل رو بیرون از دایرکتوری پابیک قرار داد.
و...