2013-06-20 2 views
0

PHP로 파일 관리자를 만들었습니다. 모두 잘 읽고, 삭제, 이동, 편집하고 있습니다. 그러나 수정할 파일의 내용을 표시 할 때 문제가 있습니다.PHP : 파일 편집 용 양식

<?php 
if (isset($_POST['file'])) { 
    $file = $_POST['file']; 
?> 

<form action="edit_file_process3.php" method="get"> 
    <p>This is the content of the file <?php echo $file; ?>. Now you can modify it:</p> 
<textarea rows="10" cols="70" name="content"><?php readfile($file) ?></textarea> 

<p><input type="submit" name="submit" value="edit <?php echo $file; ?>" /> </p> 
</form> 

<a href="read2.php">Come back to the file manager</a> 

처음 : 나는 텍스트 영역에서이 코드의 내용을 내가 파일 이름을 얻을 다른 페이지에서, 수정하고, 보여주기 위해 어떤 파일을 선택하는 사용자에게 떠나 이전의 형태에서

내가 파일을 선택하는 대신 적절한 내용의 텍스트 영역에서, 그것은 다음과 같이 나타납니다

<br /> 
<font size='1'><table class='xdebug-error xe-warning xe-scream' dir='ltr' border='1' cellspacing='0' cellpadding='1'> 
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>(!)</span> SCREAM: Error suppression ignored for</th></tr> 
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>(!)</span> Warning: readfile(prova4.txt): failed to open stream: No such file or directory in C:\wamp\www\LEARNING\Files\edit_file_process3.php on line <i>50</i></th></tr> 
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> 
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> 
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0004</td><td bgcolor='#eeeeec' align='right'>144848</td><td bgcolor='#eeeeec'>{main}()</td><td title='C:\wamp\www\LEARNING\Files\edit_file_process3.php' bgcolor='#eeeeec'>..\edit_file_process3.php<b>:</b>0</td></tr> 
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0004</td><td bgcolor='#eeeeec' align='right'>145248</td><td bgcolor='#eeeeec'><a href='http://www.php.net/readfile' target='_new'>readfile</a> 
()</td><td title='C:\wamp\www\LEARNING\Files\edit_file_process3.php' bgcolor='#eeeeec'>..\edit_file_process3.php<b>:</b>50</td></tr> 
</table></font> 

나는 그것이 작동 후 뭔가 다른, 다음 시간이 텍스트를 덮어 쓸 경우 텍스트 영역은 적절한 내용을 표시합니다 파일에 대해. 처음에는이 작업을 수행한다는 것은 상당히 불쾌합니다. 왜 이런 일이 발생합니까?

+1

readfile() 대신 file_get_contents() 및 file_put_contents() 함수를 사용해야합니다. readfile()은 파일을 읽고 echo ('file contents')처럼 출력 버퍼에 직접 씁니다. –

+0

오류는 'prova4.txt'파일의 경로가 잘못되었음을 나타냅니다. – budwiser

+0

나는 시도했다. with file_get_contents() 와 echo file_get_contents() 그러나 나는 동일한 오류가 발생했습니다. – johnnyfittizio

답변

0

스크립트가 올바른 디렉토리의 파일을 찾고 있는지 확인해야합니다.

절대 경로를 사용할 수 있습니다. /from/root/to/my/dir 또는 상대 경로. ../where/is/my/file.

상대 경로를 사용하는 경우 파일을 찾는 스크립트에 상대적인 올바른 경로 이 있어야합니다. 그렇지 않으면 당신은 잔소리가납니다 스트림을 열지 못했습니다 :이 경우 파일 또는 디렉토리가 없습니다.

편집

내가 제대로 이해하면, 당신은 이미 파일 시스템에 존재해야 파일을 편집하기 위해 노력하고 있습니다. 처음으로 열려고하면 설명하는 오류가 발생합니다. 스크립트가 잘못된 디렉토리에서 파일을 찾고 있기 때문입니다. Barmar가 지적한 것처럼 "편집"하고 저장하면 다른 디렉토리에 실제로 새 파일을 만들 가능성이 큽니다. 이 후에 동일한 이름을 가진 다른 디렉토리에 두 개의 서로 다른 파일이있을 수 있습니다. 다른 하나는 "파일 탐색기"에 표시되는 것이고 다른 하나는 실제로 편집하는 것입니다.

+0

고마워! 상황을 나에게 분명히 보여줘! 이전의 세 파일이 콘텐츠 수정 권한이있는 루트 폴더에 저장된다는 것을 알았습니다. 네 번째 파일 (지금 편집하고 싶은 파일)은 거기에 없으며 아직 편집하지 않았기 때문입니다. 그래서 경로를 수정하려고합니다. – johnnyfittizio

+0

고맙습니다. 지금 고쳐주세요. 당신이 옳았어요, 파일이 실제로 내가 생각했던대로 편집 된 것이 아니라 새롭게 만들어지고 루트 폴더에 저장되었습니다. '업로드'폴더에는 내용이 수정되지 않은 채로 남아있었습니다. 그래서 파일을 제대로 읽으려면 텍스트 영역에서이 행을 수정하십시오. 파일을 편집하는 PHP 스크립트의이 줄은 다음과 같습니다. $ to_modify = fopen ("upload /". $ filename, "w +") 또는 die ("쓰기 모드에서 파일 열기 중 오류! "); 이제 모든 것이 올바르게 작동합니다. – johnnyfittizio

+0

도와 드릴 수있어서 기쁩니다. 해피 코딩! :디 – budwiser