dosya okumak için olası iki seçenek var file_get_contents
ile readfile
file_get_contents
için
$dosyaIcerigi = file_get_contents($dosya) //url veya dosya yolu ikisi de çalışır
echo $dosyaIcerigi;
readfile
biraz daha farklı, dökümanı tüm ekrana yazdırır ve header
da content-type
bildirilmez ise, salt formatta gösterilir
header('Content-type: application/xml');
readfile($dosya); // sadece yol, url desteklemez
bazen sana şaşırıyorum, herkese çok detaylı uzun ve teknik cevaplar veriyorsun. iki mesajı da okudum, bahsettiğin örneği de uyguladım, yeni aynı sonucu aldım, aslında 3. mesajımda yer alan callback'den bir farkı yok, sadece ben daha kısa yazmışım. birde siz, now anahtarını da bu callback'a almışsınız. çok fazla şey denedim aslında, dediğiniz gibi işlem bitmeden değerleri okumaya çalıştığımı fark etmemin üzerindne çok geçti. ama ne yaparsam yapayım, asekron döngü yazıp değerin dönmesini bekletsem bile değer alamıyorum. sizin verdiğiniz örnekte başarısızlıkla sonuçlandı. başta şöyle düşündüm, kurucu içerisinde tek özelliğe tüm ayarları aktarırsam, diğer yöntemler içerisinde ekstra kod yazmadan işimi görürüm. bu yüzden bu kadar zorladım, aman bu da böyle olsun demedim. nitekim olmadı : )
kendi kodunuzu test etmek istersenizde
//manifest.json
{
"name": "Olymp Trade Transactions",
"description": "For technical support, you can always contact me on fiver. https://www.fiverr.com/****",
"version": "1.0",
"manifest_version": 3,
"action": {
"default_popup": "index.html",
"default_icon": "logo.png"
},
"permissions": [
"storage",
"unlimitedStorage",
"notifications",
"contextMenus"
]
}
sıradan bir klasöre bunu ve index.html olarak kodunuzu ekleyebilirsiniz.
pes ettim. az kod çok iş mantığıyla kod yazmak istemiştim olmadı, ilk çözüme geri dönüyorum. her yöntem için async sarmalayıcı yazıp beklettikten sonra, yazıyorum ne yazcaksam.
Promise.all([this.getData()]).then(obj => {});
o kadar kod ekledikten sonra, şunu eklememek için çektiğim ızdraba rağmen, ekliyorum. konuya kimsenin fikir belirtmemesi de ayrı ayıp oldu.
iki adet örnek bırakıyorum konuyu aydınlatabilecek bir bilgiye ciddi anlamda ihtiyacım var. sorun ise, tanımlı nesnelerin anahtar belirtildiğinde tanımsız dönmesi.
bu callback kullandığım örneğim;
class Conf {
constructor() {
this.conf = {};
Object.entries(this.storageData().data).forEach(([key, val]) => {
chrome.storage.local.get(key, obj => {
!obj[key] ?
chrome.storage.local.set(
{[key]:val}, this.getData2({[key]:val})) :
this.getData2(obj);
});
});
this.conf.now = new Intl
.DateTimeFormat(this.conf.lang, {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'longGeneric',
timeZone: this.conf.timeZone
}).format(new Date(Date.now()));
console.log(this.conf, this.conf.lang) //output parameters 1: succes, parameter: 2 failed
}
getData2(data){
Object.assign(this.conf, data)
console.log(this.conf.lang) // output: succes
}
storageData(){
this.data = {
lang : 'en',
testData1: 1,
testdata2: 2,
}
return this;
}
}
(function(){ new Conf; })();
bu da promise kullandığım örneğim;
class Conf {
getData2(data){
Object.assign(this.conf, data)
}
async getData(){
const obj = new Promise(resolve =>{
resolve(this.storageLocal());
}).then(obj => { return obj });
this.conf = await obj;
console.log(this.conf, this.conf.lang);
}
storageLocal(){
this.conf = {};
/*
checks the specified cookie, if there is no cookie it automatically creates the specified cookie
&&
selects the created cookie as object and returns value
@String key => key value of the object contained in the cookie
@Object val => configuration object contained in the cookie
*/
Object.entries(this.storageData().data).forEach(([key, val]) => {
chrome.storage.local.get(key, obj => {
!obj[key] ?
chrome.storage.local.set(
{[key]:val}, this.getData2({[key]:val})) :
this.getData2(obj);
});
});
this.conf.now = new Intl
.DateTimeFormat(this.conf.lang, {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'longGeneric',
timeZone: this.conf.timeZone
}).format(new Date(Date.now()));
return this.conf;
}
storageData(){
this.data = {
lang : 'en',
testData1: 1,
testdata2: 2,
}
return this;
}
}
(function(){
var Settings = new Conf;
Settings.getData();
})();
name server değişikliği yapman gerekiyor bunun için.
- ilk adım domain aldığın sağlayıcıyıda, domain ile ilgili ayarlar sayfasından domainini seç ve NS ibaresini ara.
- ikinci adım hosting servis sağlayıcın açıksa, domain ekle de. varsayılanda zaten kendi ns'sinini gösterir. kendi ns adresini eklemez veya gözükürde yoksa soruver.
- üçüncü adım, ilk adımdaki domain ns ayar kısmına ikinci adımda elde ettiğin ns adresini yaz.
- dördündü adım, ns eklendiğinde ikinci adımdaki domain ekleme adımını tamamla.
- son adım (opsiyonel) bazen ns değişikliklerinin oturması zaman alıyor, ticket atarsan 48 saat derler. hiç 48 saat sürdüğünü görmedim ama. tarayıcı önbelliğini temizle. ardından consolu veya terminali aç
ipconfig /flushdns
yazıp sonuc tamamlanınca bilgisayarı yeniden başlat.
artık inceden https://www.youtube.com/watch?v=hmCiKvzNkkw şu kıza bağladım. dedim ki belki veri yüklenmeden koşullar çalışıyordur, promise kullanayım
const obj = new Promise(resolve =>{
resolve(this.storageLocal());
}).then(obj => { return obj });
this.conf = await obj;
console.log(
this.conf,
this.conf.lang,
this.conf['lang']
)
yine olmuyor. tüm objeyi basıyor, anahtar belirtince basmıyor.
ilk şoku atlatıp, sinir krizim geçince oturup yazmaya devam ettim : )
ama mantıksız olan bir noktada takıldım.
burada diyorum ki, chrome.storage.local.get
yönteminde belirtilen anahtar yoksa yenisini oluştur, daha sonrasında callback ile boş nesneye dönen sonucu aktarıyorum;
let conf = {};
Object.entries(this.storageData().data).forEach(([key, val]) => {
chrome.storage.local.get(key, object => {
if(!object[key])
chrome.storage.local.set(
{[key]:val},
function(){
Object.assign(conf, {[key]:val})
}
);
});
});
yukarıdaki kod, ilk girişte çalıştırılacak bir kod, daha sonraki oturumlarda ihtiyaç duyulmayacak. dolayısıyla bu seferde mevcut depolanan verileri okumam gerkekiyor;
chrome.storage.local.get(null, items => {
Object.assign(conf, items);
});
onu da bununla hallediyorum.
<a href="https://imgur.com/LZjSic1.png" target="_blank">şimdi sorun tam şu noktada ortaya çıkıyor;</a>
console.log(
this.conf,
this.conf.lang,
conf,
conf.lang
);
this.conf
ve conf
tuttuğu tüm objeleri consola basıyor, ama this.conf.lang
ve conf.lang
undefined
dönüyor.
bitti mi bitmedi,
new Intl
.DateTimeFormat(conf.lang, {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'longGeneric',
timeZone: conf.timeZone
}).format(new Date(Date.now()));
aynı bloğun içinde olan bu kodda conf.lang
undefined
dönmüyor.
<span style="color:red;font-size:16px;font-family:sans">bu durumun sebebi ne olabilir?</span>
tam kod örneği;
let conf = {};
Object.entries(this.storageData().data).forEach(([key, val]) => {
chrome.storage.local.get(key, object => {
if(!object[key])
chrome.storage.local.set(
{[key]:val},
function(){
Object.assign(conf, {[key]:val})
}
);
});
});
chrome.storage.local.get(null, items => {
Object.assign(conf, items);
});
//conf["data"] = conf.langs[conf.lang];
conf["now"] = new Intl
.DateTimeFormat(conf.lang, {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'longGeneric',
timeZone: conf.timeZone
}).format(new Date(Date.now()));
this.conf = new Object(conf);
console.log(
this.conf,
this.conf.lang,
conf,
conf.lang
);
sorgunun yavaşlama nedeni tüm kolonlarda arama yapıyor olman. örneğin kullanıcının eposta adresini arıyorsun ve bunu kullanıdı adına göre yapıyorsun, kodun şöyle olmalıdır;
SELECT email FROM tablo WHERE username LIKE "%value%"
birden fazla kolon için virgülle kullanacağın verileri çoğaltabilirsin
SELECT email, image, birthday FROM tablo WHERE username LIKE "%value%"
hiçbir sorgunda * işareti kullanmamanı şiddetle tavsiye ederim.
edit: ayrıca başlayan veya biten ifadeleri ile arama yapman daha hızlı sonuçlar döndürecektir.
bu başlayan araması örneği
SELECT email FROM tablo WHERE username LIKE "%r00t"
bu da biten
SELECT email FROM tablo WHERE username LIKE "r00t%"
var div = document.body;
div.scrollTop = div.scrollHeight;
önce yukarıdakini dene, scrollbar body'de ise aşağıya iner farklı bir elementte ise inmez.
var div = document.querySelector("main");
div.scrollTop = div.scrollHeight;
farklı elementte olduğunda da bunu kullanacaksın. buradaki main benim sayfama özel, senin scrollbar'ın nerede onu kontrol etmen gerekiyor.
değiştirmen için bazı örnekler;
<main>Bu benim divimdi doğrudan elementi seçtim, sayfada tek olduğu için</main>
<html></html>
<section></section>
<div class="container"></div>
<div id="container"></div>
var div = document.querySelector("html");
var div = document.querySelector("section");
var div = document.querySelector(".container");
var div = document.querySelector("#container");
bunlar da düzenlemen gerekirse, örnek seçiçiler.
varsayılan ayarlayabilirsin. tarayıcıya bakıp türkçe ise türkçeye yönlendirebilir, türkçe değilse else kısmına ingilizce falan koyabilirsin. veya referans url'i alıp, dili seçtikten sonra sayfaya yönlendirebilirsin. birkaç soru geride benzer bir soru var, yönlendirme için yanıtlara bakabilirsin https://prototurk.com/soru/6099-php-login