böyle bir şey olamaz ya :D kod gözüme çok karmaşık geldi, biraz düzenleyip biraz da kısaltayım dedim. kısalmadı ahah, üstüne 5-6 satır daha fazla oldu boşlukları sildiğim halde.
soruyu anlaması zor, daha detaylı ve teknik sorarsan daha iyi yardımcı olabiliriz. sanırım son döngüde ki gelen değerler ile alakalı bazı nitelikleri almak istiyorsun. ama böyle olmaz, birde resimden kod çıkartıp xml mi parçalayacağız? xml'i eklemen lazım.
function ara($bas, $son, $yazi){
@preg_match_all('/' .preg_quote($bas, '/').'(.*?)'. preg_quote($son, '/').'/i', $yazi, $m);
return @$m[1][0];
}
if(isset($_FILES['dosya'])){
$hata = $_FILES['dosya']['error'];
if($hata != 0) {
echo 'Yüklenirken bir hata gerçekleşmiş.';
}else{
$boyut = $_FILES['dosya']['size'];
if($boyut > (1024*1024*3)){
echo 'Dosya 3MB den büyük olamaz.';
}else{
$elementler = [
"unvan" => 'cbc:Name',
"adres" => 'cbc:StreetName',
"sirketMahalle" => 'cbc:CitySubdivisionName',
"sirketSehir" => 'cbc:CityName',
"faturaNo" => 'cbc:ID',
"vergiDairesi" => ['<cac:TaxScheme><cbc:Name>', '</cbc:Name></cac:TaxScheme>'],
"vergiNo" => ['<cbc:ID schemeID="VKN">', '</cbc:ID>'],
"faturaAciklama" => 'cac:Item',
"urunTutar" => 'cac:Price>',
"toplamTutar" => ['<cbc:PriceAmount currencyID="TRY">', '</cbc:PriceAmount>']
];
$uzanti = preg_replace('/.*?\.(.*)$/', '$1', $dosya);
$dosya = $_FILES['dosya']['tmp_name'];
copy($dosya, 'dosyalar/'.$_FILES['dosya']['name']);
echo '<br>Dosyanız upload edildi!';
$icerik = file_get_contents($dosya);
$sonuc = array();
foreach($elementler as $key => $e){
$sonuc[$key] = is_string($e) ? ara("<$e>", "</$e>", $icerik) : ara($e[0], $e[1], $icerik);
}
//echo str_replace('<', '<', $icerik);
echo "
<b>Şirket Ünvanı:</b> {$sonuc["unvan"]}<br>
<b>Şirket Adres:</b> {$sonuc["adres"]}<br>
<b>Şirket Mahalle:</b> {$sonuc["sirketMahalle"]}<br>
<b>Şirket Şehir:</b> {$sonuc["sirketSehir"]}<br>
<b>Fatura Numarası:</b> {$sonuc["faturaNo"]}<br>
<b>Vergi Dairesi:</b> {$sonuc["vergiDairesi"]}<br>
<b>Vergi Numarası:</b> {$sonuc["vergiNo"]}<br>
<b>Fatura Açıklamas:</b> {$sonuc["faturaAciklama"]}<br>
<b>Urun Toplam Tutar:</b> {$sonuc["urunTutar"]}<br>
<b>Fatura Toplam Tutar:</b> {$sonuc["toplamTutar"]}<br>
";
echo strip_tags($sonuc["faturaAciklama"], '<cac:TaxSubtotal>');
//echo strip_tags($sonuc["faturaAciklama"], ['<cac:TaxSubtotal>', '<cbc>']); //çoklu kullanım
//echo strip_tags($sonuc["faturaAciklama"]); //tamamen temizlenmiş
}
}
}
yukarıdaki de söz de daha okunaklı yaptığım hali : )
hızlı çözüm istersen
strip_tags https://www.php.net/manual/tr/function.strip-tags.php
bu yöntemi bi dene derim, tüm elementleri kaldıracak sadece metinleri bırakacak, belki anlaması kolay olması için bir iki elementi sonra silmek üzere de bırakabilirsin.
ama kalıcı bir çözüm ve kendini geliştirmek istersen, https://www.php.net/manual/tr/class.domdocument.php bu sınıfı öğrenmeni tavsiye ederim. bende yakın zamana kadar preg_match kullanıyordum ve buna geçtim rahatladım.
if ($dil =="tr" || $dil == "en" || $dil == "de" || $dil == "it" || $dil == "fr" || $dil == "nl" || $dil == "sa" || $dil == "es" || $dil == "se" || $dil == "no" || $dil == "bg" || $dil == "fa" || $dil == "jp" || $dil == "fi" || $dil == "be" || $dil == "dk"){
$_SESSION["dil"] = $dil;
header("Location:$sayfa");
}else {
$yonlendiren = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : 'index.php';
header("Location:$yonlendiren");
}
kasten mi yapıyorsun? @tayfunerbilen'in kendisi örnek verdi, öncesinde bende mevcut örneğin olduğu soruya link bıraktım. tamam anlamamış olabilirsin, de güzel insan sinir oldum anlaman için nasıl çalıştığına dair her türlü argümanı verdim. ki html'in rel özelliğine kadar değindim, bu artık top nokta, konuyla alakalı ama gereksiz bir bilgiydi. dil seçtirdiğin sayfanın kodlarını at, düzenleyip ekleyim.
ben bi sorun görmüyorum. düzgün bir şekilde çalışıyor. https://www.doctorsinturkey.com/loc.php?loc=tr adresinden dil seçtikten sonra önceki sayfaya yönlendiriyor. ama kalkıpta https://www.doctorsinturkey.com/loc.php?loc=tr bu linke hiçbir yönlendirme olmadan, doğrudan adres barına yazıp gidersen, bir önceki mesajda bahsettiğim durum yaşanır. senden benden başka kimsede bu linke doğrudan gitmez, site içerisinde tıklayınca zaten referans alınmış oluyor. hala daha anlamamışsın. daha nası örneklendirebilirim bilmiyorum.
https://www.doctorsinturkey.com/eda-akpinar-1 bu adrese gittiğim zaman çıkan dropdown'dan https://www.doctorsinturkey.com/loc.php bu adres üzerinden bir dil seçtiğimde
/*
loc.php
*/
echo $_SERVER['HTTP_REFERER']; //https://www.doctorsinturkey.com/eda-akpinar-1
ama çerezi sildim, doğrudan bu adrese gittiö https://www.doctorsinturkey.com/loc.php?loc=tr;
/*
loc.php
*/
echo $_SERVER['HTTP_REFERER']; //Undefined
$_SERVER['HTTP_REFERER']
etkileşim için yönlendiren olması gerekiyor, adından da anlayacağın gibi yönlendiren bilgisini veriyor. doğrudan erişim yaparsan tabi ki değer vermez. test etmek için,
<a href="site.com/profil">hey, sitede ki profilime baksana!..</a>
not: bazı siteler yönlendirme bilgisi vermemek için, bağlantılar no-ref ekleyebiliyor. o zaman çalışmaz.
<a rel="noreferrer" href="site.com/profil">hey, sitede ki profilime baksana!..</a>
"tamam da" sorduğun soruyla alakası var mı şuan da ki hatanın? tabi ki yok. yani benim yaptığım "olmuyor" değil. şuan istediğin şekilde çalışıyor. hata var mı, evet kontrol ettim hata var. bu da şundan kaynaklanıyor, window.scrollTo(0, document.body.scrollHeight);
konuda bahsettiğin hataya odaklandığım için, bu kısma dikkat etmemişim. sen scrolun yukarı gitmesine baştan beri izin vermemişsin ki. sonra olmuyor. bal gibide oluyor, lütfen pasif agresif tavırla hesap sormak yerine, kodun ne yaptığından çok nasıl çalıştığını anlamaya çalışınız. al, kopyala yapıştır, işini gör. böyle olmamalı bence.
document.addEventListener('scroll', () => {
if((window.innerHeight + window.scrollY) >= document.body.scrollHeight)
fetch("https://localhost/data.txt").then(async response => {
document.querySelector('#mesajlar').innerHTML = await response.text();
});
});
buyrun sıfırdan yazdım. amac neydi; scrollbar'ın mevcut pozisyonu ekranın mevcut yüksekliğine eşit veya üzerinde ise, içeriği yükle. süre tanımlayıp, daha sonra bunu kaldırmaya bile gerek yoktu aslında. burada bak, ekstra kod dahi yok, üstüne kodları çıkarttık hatta. kendi ayağına sıkmak istiyorsan bu şekilde devam et, ama gelişim için biraz gayret arkadaşım ya. ben biraz kolay alınıyorum, "tamam da" diye yazınca siz biraz sinirlendim kusra bakmayın.
not: azami yükseklik, javascript'in verdiği yükseklikten +15 piksel fazla çıkıyor bende, bu da geriye dönüşteki o 15 piksellik fark'dan dolayı, tekrar sorguya alabiliyor. sizde de öyleyeyse buna göre -15 düşürün. console.log((window.innerHeight + window.scrollY), document.body.scrollHeight)
bununla kontrol edebilirsin.
soruyu anladığım kadarıyla, kodları bulmaya çalıştım. bazı değişkenlerde eksik vardı, test ederek kendim tamamladım. en temel sorun. scrolun insmesini sağlayan anonim fonksiyonun koşul içersine yazılmasından kaynaklanıyor, dolayısıyla else durumda tanımsız göründüğünden çalışmıyor. çalışan yöntemi daha kısa olarak düzenleyip yazdım.
benim kodum
window.onscroll = function(ev) {
var silinterval = setInterval(() => {
fetch("https://localhost/data.txt").then(async response => {
var data = await response.text();
document.querySelector('#mesajlar').innerHTML = data;
window.scrollTo(0, document.body.scrollHeight);
});
}, 2000);
(window.innerHeight + window.scrollY) >= document.body.scrollHeight ?
silinterval : clearInterval(silinterval);
};
senin kodun ve hatanın sebep olduğu nokta yorum satırı olarak işaretli;
window.onscroll = function(ev) {
if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
/*
silinterval = setInterval(() => {
fetch("sikayet.txt").then(function(response) {
return response.text();
}).then(function(data) {
mesajlar.innerHTML = data
window.scrollTo(0, document.body.scrollHeight);
})
}, 2000);
*/
} else {
clearInterval(silinterval);
}
};
kendi kodundan devam etmek istersen düzenlemen gereken, tanımlamayı koşuldan önce yazmak;
window.onscroll = function(ev) {
var silinterval = setInterval(() => {
fetch("sikayet.txt").then(function(response) {
return response.text();
}).then(function(data) {
mesajlar.innerHTML = data
window.scrollTo(0, document.body.scrollHeight);
})
}, 2000);
if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
silinterval;
} else {
clearInterval(silinterval);
}
};
o zaman ek olarak sertifikanın doğrulanmasını iptal etmek için şunu CURLOPT_SSL_VERIFYPEER
false ayarda kullanmayı dene. tam emin olmamak ile şunu da sıfır ayarında deneyebilirsin;
CURLOPT_SSL_VERIFYHOST
Common Name veya Subject Alternate Name alanının varlığının yanında
sağlanan konak ismi ile eşleşmenin de aranması için 2, isimlere bakmak
için 0 olmalıdır. 1 kullanılmamalıdır. Üretim ortamlarında bu seçeneğin
değeri 2 (öntanımlıdır) olarak tutulmalıdır.
edit;
ben sorunsuz bağlandım, eğer bağlanmak istediğiniz site şuysa, https://earsivportal.efatura.gov.tr/
HTTP/1.1 405 Method Not Allowed
Server: nginx/1.19.0
Date: Sat, 09 Jul 2022 21:09:00 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 104
Connection: keep-alive
X-Powered-By: Undertow/1
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
CIP:
ama güvenlik önlemleri nedeniyle, 200 değil 405 yanıtı veriyor. post methodunu desteklemiyor.
çalışan basit bir örnek ile bağlanabilirsin;
$url = "https://earsivportal.efatura.gov.tr/";
$curl = curl_init($url);
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false
));
$response = curl_exec($curl);
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$error = curl_errno($curl) . ': ' . curl_error($curl);
curl_close($curl);
echo $response;
CURLOPT_SSLVERSION
kullanarak ssl versiyonunu değiştirmeyi deneyin, varsayılan sıfırdır. daha detaylı hata dönmesi içinde CURLOPT_VERBOSE
kullanabilirsiniz.
CURL_SSLVERSION_DEFAULT (0),
CURL_SSLVERSION_TLSv1 (1),
CURL_SSLVERSION_SSLv2 (2),
CURL_SSLVERSION_SSLv3 (3),
CURL_SSLVERSION_TLSv1_0 (4),
CURL_SSLVERSION_TLSv1_1 (5) veya CURL_SSLVERSION_TLSv1_2 (6) sabitlerinden biri. Azami TLS sürümü CURL_SSLVERSION_MAX_* sabitlerinden biri kullanarak atanabilir. CURL_SSLVERSION_* sabitlerinden biri ile CURL_SSLVERSION_MAX_* sabitlerinden birini VEYAlamak da mümkündür. CURL_SSLVERSION_MAX_DEFAULT (kütüphane tarafından desteklenen en büyük sürüm), CURL_SSLVERSION_MAX_TLSv1_0, CURL_SSLVERSION_MAX_TLSv1_1, CURL_SSLVERSION_MAX_TLSv1_2 veya CURL_SSLVERSION_MAX_TLSv1_3.
En iyi seçiminiz, bunu ayarlamamak ve öntanımlıyı kullanmasına izin vermektir. Bunu 2 veya 3 olarak ayarlamak, SSLv2 ve SSLv3'teki bilinen güvenlik açıkları göz önüne alındığında çok tehlikelidir.