Belirli bir zaman aralığı için bir php dosyasını çalıştırın

5 Cevap

Ben [insan müdahalesi olmadan] otomatik olarak belirli bir zamanda [veritabanı değerine bağlıdır], belirli bir kullanıcıya bir e-posta göndermek için gereken bir web sayfası geliştirmek.

Örneğin ben Send_mail.php adında bir dosya var. Bu [değil Cron'un veya başka bir yol ile] script tarafından günde bir kez yürütülür. Bu bize rehberlik edin.

Şimdiden teşekkürler.

5 Cevap

Ben aklınıza gelebilecek tek seçenek cron neyse kez tetiklenen, süresiz çalışmaya devam ediyorum, bir komut dosyası var olacaktır olarak çağırmak olmaz. Ben bu komut yapmak içindir Ne php olmadığını, olsa da, şimdiye kadar herkes ile katılıyorum ve bu is ne cron açıkça yapmak içindir.

Ama sadece php ile bunu yapmak oldukça zor olacaktır. Senaryoyu başlatılan kullanıcı her zaman kaydedildiği sürece o (tarayıcıyı kapatarak olarak komut öldürmek olurdu) bir tarayıcıdan değildi ve komut satırından (değildi böyle bir şekilde komut dosyasını başlatmak zorunda kalacak sunucu tarafı).

Bu şekilde komut çalışan muhtemelen bellek kullanımı açısından zamanla eklersiniz ve ne istediğiniz değil, hangi aşağı tarama başka bir etkinlik yavaşlatabilir söz değil, hayal.

Şey onu söyler Temelde, php scriptler çalıştırın. Eğer bir günde bazda güvenilir bir şekilde çalıştırmak isterseniz, bir şey komut dosyasını açmak için vardır. (Eğer Marius 'yöntemini kullanabilir böylece) birisi en az bir kez sitedeki bazı sayfasını ziyaret dair güvence varsa, o zaman bazı sunucu tarafı programı gibi bir çok ses (ki sizin için bunu çalıştırmak sahip olurdu cron bana).

Eğer endişe cron ancak script tüm çalışmaları yapmak sahip olan değilse cron bir gün bazında komut dosyasını açmak olabilir.

Sen değil cron tarafından 'söylüyorsun. Neden? CronJobs böyle durumlar için tam içindir! Bunu yapmak için daha iyi bir yolu yoktur!

Bunun için cron kullanmak değil Olağandışı. Erişilebilir web ise, http://yourwebsite.com/Send%5Fmail.php için bir komut dosyası tetikleyebilir. Bu Bu bir istemci tabanlı bir istek olduğunu hiç gün bir GET isteğini gerçekleştirmek için planlanıyor yazılım, vb kullanarak herhangi bir bilgisayardan olabilir.

Cron ederek, en azından günde bir kez spin içine tekerlek koymak başka bir şey gerekmez eğer.

Web sunucusu ısı ölümüne kadar, gün, ay, yıl boyunca gözetimsiz çalışabiliyor güvenilir şey.

Bunu yazabilirsiniz. Php, şüphesiz. Bu sizin web sunucusu üzerinde bir servistir süreç olacaktır.

It would have to be started at each startup. It should be checking when then last job ran and decide if it's time to run another one. Being daily, it could sleep() for hours (say 1 or 2) and check if sending time passed, then run its job and go back to sleep.

It cannot be run inside apache mod_php or through fastcgi. Those scripts die after a little time. Say 30 seconds as a rule of thumb.

Bunun yerine, başlangıç ​​sırasında bir webserver programı aracılığıyla başlamış olabilir, evet, bir system() bir php komut satırı yürütülebilir bir nohup çağrısı gibi bir şey ile:

<?php system('nohup php jobrunner.php'); ?>

kendisi diğer kopyaları zaten çalışıyor ve bu durumda intihar eğer jobrunner kontrol edilmelidir. Bu başlatılabilir olabilir ya da bir şifre girmeden, bir web kullanıcı tarafından restartable olmamalıdır.

Ve bu yeni böcek ve ilgili güvenlik riskleri olabilir sıfırdan yeniden geliştirilmektedir.

So, yes, it could be done.
And, no, I do not think it should be done, if not for a giant project needing very custom handling of daily jobs.

Genel olarak, cron hiçbir komut satırı veya sistem () erişim vermek ucuz hosting şirketleri, güvenli, hızlı, mantained, sistem yöneticileri için bilinen, iyi kabul, already running ve kullanılabilir.

Sen cronjobs bunu yapmak için kullanabilirsiniz.

Cronjob mevcut değildir, ve sitenin en az günde bir kez ziyaret ise, o sayfadaki kod koyarsanız. Sayfa yüklendiğinde her zaman, o kullanıcıya bir e-posta göndermesi gerektiğini denetler, ya da bir e-posta zaten bu gün gönderilir olup olmadığını.