Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не создает папку по mkdir
 
 автор: DMNakaKaban   (27.03.2009 в 14:42)   письмо автору
 
 

Уважаемые форумчане, подскажите. Есть код:

<?php
function MakeDirectoryName()
{
$Name $_POST['name'];
$Result="$Name".rand(100000999999);
return 
$Result;
}

function 
WriteToFile()
{
GLOBAL 
$Directory;
$TheFile="dannie.txt";
$Open=fopen($TheFile"at");
$Pass$_POST['password'];
$Directory="./users/".MakeDirectoryName();
fwrite($Open" Логин $_POST[name]\n Пароль $Pass\n Каталог $Directory\n ------------- \n");
fclose($Open);
}

function 
CreatCatalog()
{
if (
mkdir ("$Directory")) echo "Каталог успешно содан";
    else echo 
"Ошибка создания каталога";
}
?>
<html>
<head>
  <title>Рабочий каталог</title>
</head>
<body>
<?php
echo "Данные сохранены в каталог: ";
MakeDirectoryName();
WriteToFile();
CreatCatalog();
?>
</body>
</html>


После обращения формы к данному скрипту, пишет:
Данные сохранены в каталог:
Notice: Undefined variable: Directory in C:\localhost\www\Katalogi\Sozdanie kataloga usera\Work_katalog.php on line 22

Warning: mkdir() [function.mkdir]: No error in C:\localhost\www\Katalogi\Sozdanie kataloga usera\Work_katalog.php on line 22
Ошибка создания каталога./users/User522836

При этом данные сохраняет, а папку не создает.

  Ответить  
 
 автор: nikita2206   (27.03.2009 в 14:50)   письмо автору
 
   для: DMNakaKaban   (27.03.2009 в 14:42)
 

на момент вызова функции mkdir переменной $Directory несуществует.... проанализируйте код...

П.С. ужасно неразумное использование функций... и переменные с названиями с большой буквы увеличивают вероятность ошибки.... а уж про это mkdir ("$Directory") я молчу

  Ответить  
 
 автор: DMNakaKaban   (27.03.2009 в 14:57)   письмо автору
 
   для: nikita2206   (27.03.2009 в 14:50)
 

По-моему она в GLOBAL ... (?)

П.С. Вообще я не профессионал и это не готовая работа. Я просто учусь создавать папки и каталоги на опр. уровне. Так мне понятней что к чему. Вы конечно же сразу все умели и писали код без ошибок - это я сразу осознал.

  Ответить  
 
 автор: nikita2206   (27.03.2009 в 15:08)   письмо автору
 
   для: DMNakaKaban   (27.03.2009 в 14:57)
 

сори за резкость)
суть ошибки вот в чем:
в одной функции вы создаете глобальную переменную
а в следующей функции вы пытаетесь вызвать переменную $Directory, да вот только ее фактически не существует... Почему? потому что вы ее вызываете не как глобальную, а как локальную, а в этой функции нет такой переменной... в последней функции напишите вместо: mkdir ("$Directory")
напишите: mkdir($GLOBALS['Directory'])

  Ответить  
 
 автор: DMNakaKaban   (27.03.2009 в 15:17)   письмо автору
 
   для: nikita2206   (27.03.2009 в 15:08)
 

Спасибо, но не получается.
А почему как локальную? Если, например, написать в основной части echo ($Directory) - она выводит значение переменной нормально.

  Ответить  
 
 автор: nikita2206   (27.03.2009 в 15:28)   письмо автору
 
   для: DMNakaKaban   (27.03.2009 в 15:17)
 

а что говорит? какая ошибка?
если в основной части написать echo ($Directory) - она выведет, ну а если в функции CreatCatalog() напишите, то получите ошибку уровня NOTICE....

  Ответить  
 
 автор: DMNakaKaban   (27.03.2009 в 15:34)   письмо автору
 
   для: nikita2206   (27.03.2009 в 15:28)
 

А пишет вот что:

Данные сохранены в каталог: ./users/User916146
Warning: mkdir() [function.mkdir]: No such file or directory in C:\localhost\www\Katalogi\Sozdanie kataloga usera\Work_katalog.php on line 23
Ошибка создания каталога

  Ответить  
 
 автор: nikita2206   (27.03.2009 в 15:39)   письмо автору
 
   для: DMNakaKaban   (27.03.2009 в 15:34)
 

проблема в этой строчке:
$Directory="./users/".MakeDirectoryName();


попробуйте так:
$Directory="../users/".MakeDirectoryName();


или так:
$Directory = $_SERVER['DOCUMENT_ROOT']."/users/".MakeDirectoryName();

  Ответить  
 
 автор: DMNakaKaban   (27.03.2009 в 15:48)   письмо автору
 
   для: nikita2206   (27.03.2009 в 15:39)
 

Попробовал оба варианта - результат тот же (

  Ответить  
 
 автор: nikita2206   (27.03.2009 в 16:20)   письмо автору
 
   для: DMNakaKaban   (27.03.2009 в 15:48)
 

Покажите код

  Ответить  
 
 автор: DMNakaKaban   (27.03.2009 в 16:37)   письмо автору
 
   для: nikita2206   (27.03.2009 в 16:20)
 


<?php
function MakeDirectoryName()
{
$Name $_POST['name'];
$Result="$Name".rand(100000999999);
return 
$Result;
}

function 
WriteToFile()
{
GLOBAL 
$Directory;
$TheFile="dannie.txt";
$Open=fopen($TheFile"at");
$Pass$_POST['password'];
$Directory $_SERVER['DOCUMENT_ROOT']."/users/".MakeDirectoryName();
fwrite($Open" Логин $_POST[name]\n Пароль $Pass\n Каталог $Directory\n ------------- \n");
fclose($Open);
echo (
$Directory);
}

function 
CreatCatalog()
{
if (
mkdir($GLOBALS['Directory'])) echo "Каталог успешно создан";
else echo 
"Ошибка создания каталога";

}
?>
<html>
<head>
  <title>Рабочий каталог</title>
</head>
<body>
<?php
echo "Данные сохранены в каталог: ";
MakeDirectoryName();
WriteToFile();
CreatCatalog();
?>
</body>
</html>

  Ответить  
 
 автор: nikita2206   (27.03.2009 в 16:53)   письмо автору
 
   для: DMNakaKaban   (27.03.2009 в 16:37)
 

у меня работает, может папки users несуществует в корне документа?
а вы на хостинге это делаете или на локали?

  Ответить  
 
 автор: DMNakaKaban   (27.03.2009 в 16:55)   письмо автору
 
   для: nikita2206   (27.03.2009 в 16:53)
 

На локалке

  Ответить  
 
 автор: nikita2206   (27.03.2009 в 17:03)   письмо автору
 
   для: DMNakaKaban   (27.03.2009 в 16:55)
 

а это работает?
<?
function MakeDirectoryName(){
$Name 'name';
$Result="$Name".rand(100000999999);
return 
$Result;
}

function 
WriteToFile(){
GLOBAL 
$Directory;
$Directory$_SERVER['DOCUMENT_ROOT'].'/'.MakeDirectoryName();
}

function 
CreatCatalog(){
if(
mkdir($GLOBALS['Directory'])) echo "OK";
else echo 
"ERR";
}

MakeDirectoryName();
WriteToFile();
CreatCatalog();

  Ответить  
 
 автор: DMNakaKaban   (27.03.2009 в 17:08)   письмо автору
 
   для: nikita2206   (27.03.2009 в 17:03)
 

Не пойму почему, но работает только вот так:


function WriteToFile()
{
GLOBAL $Directory;
$TheFile="dannie.txt";
$Open=fopen($TheFile, "at");
$Pass= $_POST['password'];
$Directory="C:/localhost/www/Katalogi/Sozdanie kataloga usera/users/".MakeDirectoryName();
fwrite($Open, " Логин $_POST[name]\n Пароль $Pass\n Каталог $Directory\n ------------- \n");
fclose($Open);
echo ($Directory);
}

  Ответить  
 
 автор: nikita2206   (27.03.2009 в 17:11)   письмо автору
 
   для: DMNakaKaban   (27.03.2009 в 17:08)
 

ммм.. возможно это изза пробелов в имени папки...

  Ответить  
 
 автор: DMNakaKaban   (27.03.2009 в 17:15)   письмо автору
 
   для: nikita2206   (27.03.2009 в 17:11)
 

Точно! после проставления нижних прочеков все заработало ))) Спасибо

  Ответить  
 
 автор: nikita2206   (27.03.2009 в 15:11)   письмо автору
 
   для: DMNakaKaban   (27.03.2009 в 14:57)
 

Забыл сказать, точнее дать совет: пользуйтесь аргументами в функциях, тогда и код красивее будет выглядеть и быстродействие повыше будет чем создание глобальных переменных

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования