php: dosya yazma

5 Cevap php

PHP dinamik web sunucusu üzerinde bir dosya oluşturmak istiyorum.

Önce dosya saklamak için bir dizin oluşturun. BU İŞLERİ

// create the users directory and index page
$dirToCreate = "..".$_SESSION['s_USER_URL'];
mkdir($dirToCreate, 0777, TRUE); // create the directory for the user

Şimdi index.php adında bir dosya oluşturun ve içine biraz içeriği yazmak istiyorum.

Ben çalışıyorum:

$ourFileName = $_SESSION['s_USER_URL']."/"."index.php";
$ourFileHandle = fopen($ourFileName, 'x') or die("can't open file");
fclose($ourFileHandle);

// append data to it
$ourFileHandle = fopen($ourFileName, 'a') or die("can't write to file");

$stringData = "Hi";

fwrite($ourFileHandle, $stringData);

Ama bu dosya yok diyor $ourFileHandle = fopen($ourFileName, 'x') or die("can't open file"); geçmiş geçmez, ama bu noktadır. Ben bunu oluşturmak istiyorum.

Bazı echoing ve yolu (/ kişi / jason) var vermedi ve ben / insanlar / jason / index.php yazmaya çalışıyorum

Herkes yanlış ne yapıyorum herhangi bir düşünce var mı?

Linux sunucu üzerinde PHP 5 inanıyorum.

-Jason

5 Cevap

İlk yapmanız:

$dirToCreate = "..".$_SESSION['s_USER_URL'];

Ama yazmaya çalıştığınızda dosya '..' öneki, bu yüzden değiştirmeyi deneyin değil

$ourFileName = $_SESSION['s_USER_URL']."/"."index.php";

karşı

$ourFileName = '..' . $_SESSION['s_USER_URL'] . '/index.php';

ya da muhtemelen tidier:

$ourFileName = $dirToCreate . '/index.php';

You are probably getting the warning because the direckarşıry you are trying karşı write the file inkarşı does not exist

Bu php ini ayarlardan biri, ya da belki bir apache güvenlik ayarının bir sonucu olabilir.

Sadece rwxr-x gibi dir oluşturmayı deneyebilirsiniz --- ve nasıl gidiyor bakın.

Ben dosyaları / dirs onlar sihirli acessible olma durdurmak istiyorsunuz çok kişi tarafından yazılabilir olsaydı, temelde, "safemode" derlenmiş ve bu davranış ortaya eğiliminde bir hosting kurulum hatırlıyorum.

Onun muhtemelen php doc'd, ancak kötü kontrol etmelisiniz.

neden kullanmayalım:

file_put_contents( $filename, $content )

veya yazmadan önce siz, touch dosyası.

Dosya 'index.php' zaten var mı? Eğer 'x' modu ile fopen olduğunda, dosya varsa fopen FALSE döndürür ve bir uyarı tetikleyecek.

Ne i ilk fark geçerli klasörde php dosyası yapmak için çalışırken, daha sonra ağacında bir dizin daha yapıyoruz olduğunu. Yanılıyorsam, ama yeni bir klasöre dosya yapmak için çalışıyoruz değilse beni düzeltin? i doğru php hatırlayacak olursak (bir süre oldu pardon, ben muhtemelen burada fark değil başka bir dilde bir şeyler eklemek gerekir) burada bu basit bir dizin oluşturur, buna uygun değerleri değiştirmek tabii, bir acemi için bir şekilde anlamak için daha kolaydır ve bir dosya daha sonra izinleri ayarlar yapar.

<?php

$path = "..".$_SESSION['s_USER_URL'];   
// may want to add a tilde (~) to user directory
// path, unixy thing to do ;D

mkdir($path, 0777); // make directory, set perms.

$file = "index.php"; // declare a file name

/* here you could use the chdir() command, if you wanted to go to the 
directory where you created the file, this will help you understand the 
rest of your code as you will have to perform less concatenation on
 directories such as below */

$handle = fopen($path."/".$file, 'w') or die("can't open file");
// open file for writing, create if it doesn't exist

$info = "Stack Overflow was here!";  // string to input

fwrite($handle, $info);   // perform the write operation

fclose($handle);  // close the handle

?>