Короче что-то получилось. Я хотел написать систему, с пом. которой можно редактировать файлы прямо на серевере, вот чего получилось. Заливаете это к себе в директорию и делаете что хотите
| Код | <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <style> td#t{color:#006600; background-color:#FFFF00;} </style> <body> <? if(!isset($_REQUEST['dir'])) { $f=$_SERVER['DOCUMENT_ROOT']; $dir=opendir($f) or die ("error open dir"); chdir($f); } else { $f=$_SERVER['DOCUMENT_ROOT']; $f2=$_REQUEST['dir']; $dir=opendir($f2) or die ("error open dir"); chdir($f2); }
$mass=array(); $i=0; while(($d=readdir($dir))!==false) { if($d=='.') continue;//Нам нужны только подкаталоги, игнорируем корневой каталог "." $ty=filetype($d); $mass[$ty][$i]=$d; $i++; }
sort($mass); $co=count($mass);
echo"<table width=100% cellpadding=1 cellspasing=1 border=1>"; echo"<tr><td id=t><b>name</b></td><td id=t><b>type</b></td><td id=t><b>mime_type</b></td><td id=t><b>path</b></td><td id=t><b>run</b></td><td id=t><b>view</b></td><td id=t><b>edit</b></td></tr>";
for($k=0; $k<$co; $k++) { foreach($mass[$k] as $r) {// if(is_dir($r)==true) { echo"<tr><td>".$r."</td><td>dir</td><td>dir</td><td>".realpath($r)."</td><td><a href=?dir=".realpath($r).">".$r."</a></td><td> </td><td> </td></tr>"; } if(is_file($r)==true) { $doc_root=$_SERVER['DOCUMENT_ROOT']; $real=dirname(realpath($r)); $real_z=str_replace("\\","/",$real); $zam=ereg_replace($doc_root,"",$real_z); $rez=explode(".",$r); if(!isset($rez[1])) $rez[1]="Uknown"; echo"<tr><td>".$r."</td><td>file</td><td>".$rez[1]."</td><td>".dirname(realpath($r))."</td><td><a href=".$zam."/".$r.">".$r."</a></td><td><a href=rabbit.php?path=".$zam."/".$r."&do=view>".$r."</a></td><td><a href=rabbit.php?path=".$zam."/".$r."&do=edit>".$r."</a></td></tr>"; } }// } echo"</table><p></p>";
if(isset($_REQUEST['path'])) {## $len=strlen($_REQUEST['path'])-1; $path=substr($_REQUEST['path'],1,$len); $tk=fopen($path,"r+t") or die ("error open"); $tu=fseek($tk,0,SEEK_SET); $tu=fread($tk,100000); $tmp=fopen("tmp.txt","w+t") or die("error open tmp"); fwrite($tmp,$tu);
$base=basename($_REQUEST['path']);
///read
if($_REQUEST['do']=="edit") { $file="tmp.txt"; $open=file($file); $count=count($open); echo"<form name=ch method=post action=rabbit.php>"; echo "<textarea name=textarea cols=150 rows=50>"; $str=1;//для нумерации строк for($g=0; $g<$count; $g++) { $read=htmlspecialchars($open[$g]); echo $read;//если выводить без textarea, после $read дописать <br>. $str++;//для нумерации строк } echo"</textarea>"; echo"<br><br>"; echo"<input type=hidden name=change value=".$path.">"; echo"<input type=submit name=go value=save>"; echo"</form>"; } else { if($_REQUEST['do']=="view"); { $open=fopen($file="tmp.txt","rt"); $lines=explode("\n",fread($open,100000)); $count=count($lines); //echo "<iframe width=90% height=50%>"; $str=1;//для нумерации строк for($g=0; $g<$count; $g++) { $read=htmlspecialchars($lines[$g]); echo "<font color=red>".$str."</font> ".$read."<br>";//если выводить без textarea, после $read дописать <br>. $str++;//для нумерации строк } //echo"</iframe>"; } } }##
if(isset($_REQUEST['go'])) { //$_POST['change'];// имя на которое перезаписать //$_REQUEST['textarea'];//исходник $tok=fopen($_POST['change'],"w+") or die ("error open"); fseek($tok,0,SEEK_SET); fwrite($tok, $_POST['textarea']); fclose($tok); }
?> </body> </html>
|
Только одна проблема. В 130 строке, когда я перезаписываю файл, пхп перед знаком " вставляет \ а мне это не надо, я пошарился в php.ini, и нашёл что за эту фишку отвечает magic_quotes_gpc=On, у себя то я её выключу, а у хостера как. Не подскажите как это можно обойти |