Klasörde aynı isimde dosyanın olup olmadığını nasıl kontrol edebilirim?
Merhabalar. Form'dan gelen bir sayı var. Bu sayı, oluşturacağım json dosyasının adını oluşturuyor. "1.json", "2.json" gibi. "1.json" dosyasının "json" isimli klasörde olup olmadığını aşağıdaki kodlarla yapmaya çalıştım ama her seferinde "Dosya İsmi Mevcut. Lütfen Başka Bir Dosya İsmi Veriniz" uyarısını veriyor. Kodları nasıl düzenlemek lazım acaba?
$ac = "./json/$s_icerikid" . '.json';
if(file_exists($ac)) {
echo "Dosya İsmi Mevcut. Lütfen Başka Bir Dosya İsmi Veriniz";
exit();
}
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (13)
Merhaba, file_exists()
fonksiyonuna absolute path vermeyi denedin mi ? PHP dosyanın bulunduğu dizine göre json klasörünün yolunu doğru bir şekilde verdiğinden emin olmalısın. Aşağıda bir örneğini paylaşıyorum.
...
if (file_exists(realpath(getcwd()) . '/' . $dosya)) {
echo "$dosya diye bir dosya var";
exit();
} else {
...
Kodları şu şekilde düzenledim ama sorunu halledemedim. Kodlar şu haliyle, örnek olarak, eğer "1.json" dosyası mevcutsa, "1.json dosyası var" diyor. Eğer yoksa yeni oluşturduğum dosyanın adını yazıyor. Mesela "2.json" var diyor. Yardımcı olabiir misiniz?
$ad = $_POST['ad'];
$ozellik = $_POST['ozellik'];
$kategori = $_POST['kategori'];
$eskifiyat = $_POST['eskifiyat'];
$yenifiyat = $_POST['yenifiyat'];
$indirimlifiyat = $_POST['indirimlifiyat'];
$urunsayisi = $_POST['urunsayisi'];
$urunalani = $_POST['urunalani'];
$icerikid = $_POST['icerikid'];
foreach($ad as $index => $names) {
$s_ad = $names;
$s_ozellik = $ozellik[$index];
$s_kategori = $kategori[$index];
$s_eskifiyat = $eskifiyat[$index];
$s_yenifiyat = $yenifiyat[$index];
$s_indirimlifiyat = $indirimlifiyat[$index];
$s_urunsayisi = $urunsayisi[$index];
$s_urunalani = $urunalani[$index];
$s_icerikid = $icerikid[$index];
global $filename;
$filename = $s_icerikid.".json";
$myObj->ss_dosya_adi[] = $dosya_adi;
$myObj->ss_ad = $s_ad;
$myObj->ss_ozellik = $s_ozellik;
$myObj->ss_kategori = $s_kategori;
$myObj->ss_eskifiyat = $s_eskifiyat;
$myObj->ss_yenifiyat = $s_yenifiyat;
$myObj->ss_indirimlifiyat = $s_indirimlifiyat;
$myObj->ss_urunsayisi = $s_urunsayisi;
$myObj->ss_urunalani = $s_urunalani;
$myObj->ss_icerikid = $s_icerikid;
$dosya = 'json/' . $filename;
if (file_exists($dosya)) {
echo "$dosya diye bir dosya var";
exit();
} else {
$dizijson = json_encode($myObj);
file_put_contents("json/" . $filename, $dizijson);
if (move_uploaded_file($gecici_yol, "../../images/indexurunler/" . $dosya_adi)) {
}
}
}
İlkinde yok diyor sonra var diyor dosya için. Neredeki döngüden kaynaklanıyor. Şu kodların işleyişini anlatabilir misiniz?
Hatayı resim sayısına göre vermiyor şu an. Tek uyarı veriyor ama hâlâ nasıl yapılması gerektiğini akıl edemedim.
soyle bir kontrol ile belki daha kolay yonetebilirsin;
<?php
$ad = $_POST['ad'];
$ozellik = $_POST['ozellik'];
$kategori = $_POST['kategori'];
$eskifiyat = $_POST['eskifiyat'];
$yenifiyat = $_POST['yenifiyat'];
$indirimlifiyat = $_POST['indirimlifiyat'];
$urunsayisi = $_POST['urunsayisi'];
$urunalani = $_POST['urunalani'];
$icerikid = $_POST['icerikid'];
// dosya varsa hatalar bu degiskende tutulacak
$errors = [];
foreach ($ad as $index => $names) {
$s_ad = $names;
$s_ozellik = $ozellik[$index];
$s_kategori = $kategori[$index];
$s_eskifiyat = $eskifiyat[$index];
$s_yenifiyat = $yenifiyat[$index];
$s_indirimlifiyat = $indirimlifiyat[$index];
$s_urunsayisi = $urunsayisi[$index];
$s_urunalani = $urunalani[$index];
$s_icerikid = $icerikid[$index];
$dosya = 'json/' . $s_icerikid . '.json';
if (file_exists($dosya)) {
$errors[] = "$dosya diye bir dosya var";
} else {
// dosya yoksa islemlere devam et
global $filename;
$filename = $s_icerikid . ".json";
$myObj->ss_dosya_adi[] = $dosya_adi;
$myObj->ss_ad = $s_ad;
$myObj->ss_ozellik = $s_ozellik;
$myObj->ss_kategori = $s_kategori;
$myObj->ss_eskifiyat = $s_eskifiyat;
$myObj->ss_yenifiyat = $s_yenifiyat;
$myObj->ss_indirimlifiyat = $s_indirimlifiyat;
$myObj->ss_urunsayisi = $s_urunsayisi;
$myObj->ss_urunalani = $s_urunalani;
$myObj->ss_icerikid = $s_icerikid;
$dizijson = json_encode($myObj);
file_put_contents("json/" . $filename, $dizijson);
if (move_uploaded_file($gecici_yol, "../../images/indexurunler/" . $dosya_adi)) {
}
}
}
if (count($errors) > 0) {
print_r($errors); // hatali olan dosyalari gosterir, hatali olmayanlar eklendi hatali olanlar icinde uyari vs, verebilirsin
}
Peki ne yapmalıyım. Döngüden mi çıkartayım. Döngülerden önce bu sorguyu yaparsam, yine döngü içinde kullanmam lazım olacak. Çünkü, inputtan çoklu yükleme olarak gönderiyorum.
Kodların tamaını koyayım, öyle bakın. Eğer dosya varsa dosya var diyor. Dosya yoksa da dosya yok diyor, altına dosya var diyor.
$ad = $_POST['ad'];
$ozellik = $_POST['ozellik'];
$kategori = $_POST['kategori'];
$eskifiyat = $_POST['eskifiyat'];
$yenifiyat = $_POST['yenifiyat'];
$indirimlifiyat = $_POST['indirimlifiyat'];
$urunsayisi = $_POST['urunsayisi'];
$urunalani = $_POST['urunalani'];
$icerikid = $_POST['icerikid'];
foreach($ad as $index => $names) {
$s_ad = $names;
$s_ozellik = $ozellik[$index];
$s_kategori = $kategori[$index];
$s_eskifiyat = $eskifiyat[$index];
$s_yenifiyat = $yenifiyat[$index];
$s_indirimlifiyat = $indirimlifiyat[$index];
$s_urunsayisi = $urunsayisi[$index];
$s_urunalani = $urunalani[$index];
$s_icerikid = $icerikid[$index];
$dosya = 'json/' . $s_icerikid . '.json';
if (file_exists($dosya)) {
echo "$dosya diye bir dosya var";
exit();
} else {
echo "$dosya diye bir dosya yok";
}
global $filename;
$filename = $s_icerikid.".json";
$myObj->ss_dosya_adi[] = $dosya_adi;
$myObj->ss_ad = $s_ad;
$myObj->ss_ozellik = $s_ozellik;
$myObj->ss_kategori = $s_kategori;
$myObj->ss_eskifiyat = $s_eskifiyat;
$myObj->ss_yenifiyat = $s_yenifiyat;
$myObj->ss_indirimlifiyat = $s_indirimlifiyat;
$myObj->ss_urunsayisi = $s_urunsayisi;
$myObj->ss_urunalani = $s_urunalani;
$myObj->ss_icerikid = $s_icerikid;
$dizijson = json_encode($myObj);
file_put_contents("json/" . $filename, $dizijson);
if(move_uploaded_file($gecici_yol, "../../images/indexurunler/" . $dosya_adi)) {
}
}
Farklı yöntemler deniyorum. Şöyle bir şey yaptım. Eğer aynı isimde dosya mevcutsa "mevcut" "mevcut" yazıyor. Eğer mevcut değilse "değil, mevcut" yazıyor aşağıdaki koda göre.
$dosyaismi = $s_icerikid . '.json';
$dizin = "./json/";
if(file_exists($dizin . $dosyaismi)) {
echo "mevcut <br>";
} else {
echo "değil";
}