PHP: написание файлов - PullRequest
1 голос
/ 13 ноября 2008

Я хочу динамически создавать файл на веб-сервере в PHP.

Сначала я создаю каталог для хранения файла. ЭТО РАБОТАЕТ

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

Теперь я хочу создать файл с именем index.php и записать в него некоторый контент.

Я пытаюсь:

$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);

Но это никогда не пройдет мимо $ourFileHandle = fopen($ourFileName, 'x') or die("can't open file"); Сказать, что файл не существует, но в этом суть. Я хочу создать это.

Я повторил, и путь (/ people / jason) существует, и я пытаюсь написать в /people/jason/index.php

У кого-нибудь есть мысли о том, что я делаю неправильно?

PHP 5 на Linux-сервере, я верю.

1020 * Джейсон *

Ответы [ 5 ]

5 голосов
/ 13 ноября 2008

Первое, что вы делаете:

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

Но имя файла, в который вы пытаетесь записать, не имеет префикса "..", поэтому попробуйте изменить

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

до

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

или, возможно, более аккуратный:

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

Возможно, вы получаете предупреждение, потому что каталог, в который вы пытаетесь записать файл, не существует

0 голосов
/ 13 ноября 2008

Что я впервые заметил, так это то, что вы делаете каталог выше в дереве, а затем пытаетесь создать php-файл в текущей папке. Поправьте меня, если я ошибаюсь, но вы не пытаетесь сделать файл в новой созданной папке? если я правильно помню php (извините, это было давно, я, вероятно, добавлю что-то из другого языка здесь, не замечая этого), здесь более простой способ для новичка, конечно измените значения соответственно, это просто делает каталог и создает файл, затем устанавливает разрешения.

<?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

?>
0 голосов
/ 13 ноября 2008

Файл 'index.php' уже существует? Если вы используете f в режиме «x», если файл существует, fopen вернет FALSE и выдаст предупреждение.

0 голосов
/ 13 ноября 2008

почему бы не использовать:

file_put_contents( $filename, $content )

или вы можете touch файл перед записью в него.

0 голосов
/ 13 ноября 2008

Это может быть результатом одной из ваших настроек php ini или, возможно, настройки безопасности apache.

Попробуйте создать dir как rwxr-x --- и посмотрите, как это происходит.

Я вспоминаю настройку общего хостинга, в которой был скомпилирован «safemode», и такое поведение обычно происходило, если бы файлы / директории были доступны для записи слишком большому количеству людей, они волшебным образом перестали бы быть доступными.

Это, вероятно, документация в php, но я должен проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...