Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Нужно правильно файл сохранить.
Форумы портала PHP.SU » PHP » Программирование на PHP » Нужно правильно файл сохранить.

Страниц (1): [1]
 

1. UserID - 16 Октября, 2006 - 17:11:35 - перейти к сообщению
Вообщем проблема такая:
пишу wysiwyg-редактор. После набора текста нужно сохранить. Структура папки, куда сохранять, такая:

- [Dir_Main]
- [_data]
- [_images]
- [_test]

Если в корне нет файла index.htm, то сохранить нужно в корень Dir_Main, если он есть, то в папку _data. Скрипт проверял десятки раз, но он сохраняет только в корень, т.е. перезаписывает index.htm.

Скрипт сохранения:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. if(isset($sfile))
  3. {
  4.         //-------------------------------------------------------------
  5.         $head_i  = "<html> rn";
  6.         $head_i .= "<head> rn";
  7.         $head_i .= "<title>";
  8.        
  9.         $head_o  = "</title> rn";
  10.         $head_o .= "<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'> rn";
  11.         $head_o .= "<style type='text/css'> rn";
  12.         $head_o .= "body {background-color:#FFFFFF;} rn";
  13.         $head_o .= "a:link   { color:#000000; text-decoration:none; } rn";
  14.         $head_o .= "a:active { color:#000000; text-decoration:none; } rn";
  15.         $head_o .= "a:visited {color:#AAAAAA; text-decoration:none; } rn";
  16.         $head_o .= "a:hover  { color:#0000FF; text-decoration:underline; } rn";
  17.         $head_o .= "</style> rn";
  18.         $head_o .= "</head> rn";
  19.         $head_o .= "<body> rn";
  20.        
  21.         $foot_o  = "rn</body> rn";
  22.         $foot_o .= "</html>";
  23.        
  24.         //-------------------------------------------------------------
  25.         $path = NULL;
  26.         $file_1 = "../_base/".$_GET['ad']."/index.html";
  27.         $file_2 = "../_base/".$_GET['ad']."/index.htm";
  28.         //-------------------------------------------------------------
  29.         if(!file_exists($file_1) or !file_exists($file_2))
  30.         {
  31.                 $path = "../_base/".$_GET['ad']."/";
  32.         }
  33.         else
  34.         {
  35.                 $path = "../_base/".$_GET['ad']."/_data/";
  36.         }
  37.         //-------------------------------------------------------------
  38.         $nfile = format($nfile);
  39.         if(!valid_str($nfile)) {error("Error in file name.");}
  40.         //-------------------------------------------------------------
  41.         $fnew = fopen($path.$nfile, "w");
  42.         if(!file_exists($path.$nfile))
  43.         {
  44.                 print "<script>alert('File exist.')</script>";
  45.         }
  46.         fwrite($fnew, $head_i.$ttl.$head_o.$confile.$foot_o);
  47.         fclose($fnew);
  48.         //-------------------------------------------------------------
  49. }
  50.  


Форма разметки:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.         include("./_include/save.php");
  4. ?>
  5.  
  6. <table align="left" border="0" cellspacing="0" width="70%" class="nav_table">
  7. <tr>
  8. <td align="right" class="td_left" nowrap>File Name:</td>
  9. <td align="left"><input name="nfile" type="text" class="text" id="nfile" value="index.html" size="15"></td>
  10. <td align="right" class="td_left" nowrap>Title:</td>
  11. <td align="left"><input name="ttl" type="text" class="text" id="ttl" size="20"></td>
  12. <td align="right" class="td_left" nowrap>Dir "Data":</td>
  13. <td align="left">
  14.  
  15. <select class="select">
  16.  
  17. <?php PrintFile();?>
  18.  
  19. </select>
  20.  
  21. </td>
  22. </tr>
  23. </table>
  24. <input type="submit" value="Save File" class="button" name="sfile" style="width:80px;">
  25.  
2. evgenijj - 17 Октября, 2006 - 13:25:03 - перейти к сообщению
Ты установил директорию, в которой нет файла index.html -- это имя хранится в переменной $path. Далее в этой директории ты создаешь новый файл
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $fnew = fopen($path.$nfile, "w");
  3.  

После зачем-то проверяешь, а вдуг FreeBSD не создала этот файл. Положим, что так -- у тебя нет прав на запись в эту директорию. Ты намеренно вводишь пользователя в заблуждение, извещая его о том, что файл существует:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. if(!file_exists($path.$nfile))
  3. {
  4.   print "<script>alert('File exist.')</script>";
  5. }
  6.  

И далее, назависимо от результатов проверки пишешь в этот вновь созданный файл.

Вызывает также некоторое сомнение условие:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. if(!file_exists($file_1) or !file_exists($file_2))
  3. {
  4.   $path = "../_base/".$_GET['ad']."/";
  5. }
  6. else
  7. {
  8.   $path = "../_base/".$_GET['ad']."/_data/";
  9. }
  10.  

Если в директории
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $path = "../_base/_ad/"
  3.  

лежит файл index.html или файл index.htm то новый файл с именем $nfile будет опять записан в директорию
CODE (text):
скопировать код в буфер обмена
  1. $path = "../_base/_ad/"

вполне возможно, перезаписав уже существующий. Новый файл будет записан в директорию
CODE (text):
скопировать код в буфер обмена
  1. $path = "../_base/_ad/_data/"

только если в директории
CODE (text):
скопировать код в буфер обмена
  1. $path = "../_base/_ad/"

лежат оба файла: и index.htm и index.html.
3. UserID - 17 Октября, 2006 - 17:51:43 - перейти к сообщению
Да, спасибо, я уже разобрался))

 

Powered by ExBB FM 1.0 RC1