bir cok mail servisinin artik paketi var, ancak mail'i SMTP ile gonderecegini varsayarak en kullanisli paketi onerebilirim:
https://github.com/PHPMailer/PHPMailer
Şimdi istediğin 2 şey var:
- 1.si eğer x saniye içinde istek attığın yer cevap dönmezse isteği iptal etmek istiyorsun.
Bunun için fetch'de AbortController
sınıfını kullanabilirsin.
- 2.si ise eğer timeout olursa bunu yakalamak ve buna göre bir işlem yapmak istiyorsun.
Bunun içinde Promise.race
metodunu kullanabilirsin. Bunun içine verdiğin promise'lerden hangisi önce sözünü tutarsa onu döndürüyor. Bu mantıkta fetch zaten promise, senin 2. bir promise yazman lazım bu arkadaşta 5 saniye sonra reject olacak bir promise olacak. Böylece eğer 5 sn uzun süren bir isteğin varsa yazdığın 2. promise sözünü tutacağı için timeout olduğunu anlayacaksın.
Gelelim kodlara:
function fetchWithTimeoutAndAbort(url, timeout = 5000) {
const controller = new AbortController();
const signal = controller.signal;
// Zaman aşımı için bir promise oluştur
const timeoutPromise = new Promise((_, reject) => {
const timeoutId = setTimeout(() => {
controller.abort(); // Zaman aşımında isteği iptal et
reject(new Error('Request timed out and was aborted'));
}, timeout);
});
// Fetch isteği ve zaman aşımı promise'ını yarıştır
return Promise.race([
fetch(url, { signal }).then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.status; // her sey okey ise status'u dondur
}),
timeoutPromise
]);
}
kullanırken ise:
fetchWithTimeoutAndAbort('https://hedefsite.com', 5000)
.then(data => console.log(data)) // Başarılı yanıtı işle
.catch(error => {
if (error.name === 'AbortError') {
console.error('Fetch request was aborted due to timeout');
} else {
console.error('Fetch error:', error);
}
});
Güncelleme
Son çıkanlara baktığımda AbortSignal: timeout()
diye bir şey varmış, yani teknik olarak şöyle de kısaltılabilir:
fetch('https://hedefsite.com', { AbortSignal.timeout(5000) })
.then(res => console.log(res))
.catch(err => console.log(err))
@ebykdrms'de dedigi gibi, artik str_replace'de 2. parametrede null
kullanimi kaldirildi, onun yerine bos string olarak degistirirsen problemin cozulecektir.
kisaca projendeki butun su sekilde olan kodlarini:
str_replace($needle, null, $haystack)
soyle degistirmen gerekiyor:
str_replace($needle, '', $haystack)
Gecen PHP'nin yeni surumune gecerken ben de ayni problemi yasadim, uzucu :D eger 3. parti kullandigin class'lar vs. varsa onlarda hata cikarabilir, onlara da bir el atman gerekebilir.
bir div icine alip o div'e class verebilirsin, diger turlu hesaplamayi yapabilmek icin override eziyor sanirim proplari :/
buyur abi ihtiyacin olan regex:
^(?!0\.0[0-9]$)(?!0$)\d+(\.\d{2})?$
En dusuk 0.10'dan başlamasını sağlar, 0 ya da 0.00 ya da 0.01 ... 0.09 bu degerleri kabul etmez.
Bununla ilgili surada bir issue acilmis, cozumu ise:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
bir sunucu uzerinden calistirmaniz gerekiyor olabilir, eger istek vs. atiyorsaniz bir yerlere cors hatasi veriyor boyle actiginizda.
pwa olabilir mi dediginiz sey? zamaninda bir video hazirlamistim bununla ilgili, belki yardimci olur:
https://www.youtube.com/watch?v=I-ptHZ9oUq4
https://facebook.com
gibi olmali yonlendirme linki, eger facebook.com
gibi olursa kabul etmez domain icinde yonlendirmeye calisir.
id yoktur, cunku slug dinamik yani "kaleseramik" degerini sorguda aratiyor, id'yi gostermiyor, dolayisi ile unique slug'lari bilmiyorsan bulman da mumkun degil