2017-09-21 8 views
0

그래서 내 코드는 내 오류 메시지가 계속 나타나지만 권한은 있지만 운이 없다는 아이디어가 있습니까? PHP 파일 쓰기 - 매번 오류 메시지

<?php 
//create variables 
$first_name = (int) $_POST['first_name']; 
$last_name = (int) $_POST['last_name']; 
$document_root = $_SERVER['/var/www']; 
$date = date('H:i, jS F Y'); 
?> 
<DOCTYPE html> 
<html> 
<head> 
    <title>We get the message...</title> 
</head> 
<body> 
    <h1>We get the message . . .</h1> 
    <?php 
     $output_string = $date."\t".$first_name.$last_name." \t".$message."\n"; 
     @$fp = fopen("$document_root-messages.txt", 'w+'); 
     if (!$fp) { 
      echo "<p>apologies</p>"; 
      exit; 
     } 
     flock($fp, LOCK_EX); 
     fwrite($fp, $output_string, strlen($output_string)); 
     flock($fp, LOCK_UN); 
     fflush($fp); 
     fclose($fp); 

     echo "<p>message written.</p>"; 
    ?> 
</body> 
</html> 

난 그냥 정말 간단한 일이 아마 그래서 PHP를 배우기 시작 했어하지만 지금은 약 한 시간 동안 내 머리를 긁적 봤는데 아직 해결책을 마련하지 않았습니다.

/var/www-messages.txt 

이 이제 실제 경로 :

@$fp = fopen("$document_root/messages.txt", 'w+'); 

하고 난 당신이 무엇을 의미하는지 생각

+0

폴더에 대해 필요한 사용 권한을 갖고 있는지 확인하십시오. – PekosoG

+0

'/ var/www-messages.txt'라는 파일에 쓰는 것 같습니다. 나는 당신이'/ var/www/messages.txt'라는 것을 의미한다고 가정하고 있습니까? '$ fp = fopen ("$ document_root/messages.txt", "w +");''@'오류 제거를 제거한 것을 알 수 있습니다. –

+0

이것이 실제로 당신의 의도라면, 웹 서버가'/ var'에 직접 접근 할 수 있도록하는 것은 매우 위험합니다. '/ var/www '안에 글쓰기조차도 매우 위험합니다. 다른 모든 파일들은 명시 적으로 웹 서버 사용자가 쓸 수 없도록 만들 필요가 있습니다. –

답변

0
@$fp = fopen("$document_root-messages.txt", 'w+'); 

당신은 실제로 경로를하지 않았다가, 같은 그런 파일이 없습니다/var/www에있는 파일이 message.txt라고 가정합니다.

/var/www를 쓰기 가능하게 만드는 나쁜 습관에 대한 의견은 올바른 것이므로 좋은 사례로 시작하는 것이 좋을 것입니다. 왜냐하면 나쁜 것으로 시작하면 어쨌든 그것을 잊어 버려야하기 때문입니다. 더 많은 일.

이를 방지하는 방법은 너무 좋아, 더 명확 것에 익숙해하는 것입니다 그리고 당신이 일하고 후 에코 제거

$file_path = $document_root . '/messages.txt'; 
echo $file_path . '<br>'; 
@$fp = fopen($file_path, 'w+'); 

는, 에코도 좋은 충고입니다. 만약 당신이 뭔가를 내부에 모든 행동을 과식하는 데 익숙해지면, 디버깅하기가 매우 어렵습니다. fopen을 사용하지 않고 문자열을 구성하면, 그것을 반향하여 경로를 디버그 할 수 있으며, 모든 것을 혼동하지 않습니다. 얼마나 명확하고, 디버깅하는 것이 얼마나 쉬운 지 주목하십시오.

+0

디버깅 팁을 추가하기 만하면 : 다음 번에 에코를 추가하여 경로의 실제 값을 확인하십시오. –

+0

좋은 충고, 나는 그것을 에코와 함께 디버깅 할 수 있도록 코드하는 더 좋은 방법을 포함하도록 업데이트했다. – Lizardx