2012-11-28 3 views
0

내가 갖고있는 문제는 fopen(), fwrite() 및 fclose() 함수 때문입니다. 이것은 내가받는 오류입니다 :문제가 생겼습니다 데이터베이스를 백업합니다 PHP

경고 : fopen (/db-backup-salisbury_school-20121128-021138.sql) [function.fopen] : 스트림을 열지 못했습니다 : C : \ inetpub \ wwwroot \ omarejaz \ sbyschool \ q5.php 라인 177

경고 :에 fwrite()는 매개 변수 C 1에 주어진 자원 부울 것으로 기대 : \을 Inetpub \ wwwroot에 \ omarejaz \ sbyschool \ q5.php 라인 178

경고 : fclose()는 매개 변수 1이 리소스가 될 것으로 기대하고 C : \ inetpub \ wwwroot \ omarejaz \ sbyschool \ q5.php 줄에 179를 지정합니다.

이 부분의 코드는 다음과 같을 수 있습니다. 도움이 아래에있는 것을 발견하면 크게 감사하겠습니다!

* Save SQL to file 
* @param string $sql 
*/ 
protected function saveFile(&$sql, $outputDir = '.') 
{ 
    if (!$sql) return false; 

    try 
    { 
     $handle = fopen($outputDir.'/db-backup-'.$this->dbName.'-'.date("Ymd-His", time()).'.sql','w+'); 
     fwrite($handle, $sql); 
     fclose($handle); 
    } 
    catch (Exception $e) 
    { 
     var_dump($e->getMessage()); 
     return false; 
    } 

    return true; 
} 

} ?>

+0

출력 디렉터리에 대한 사용 권한이 올바르게 설정되어 있는지 확인하십시오. 웹 서버를 실행하는 사용자 이름에는 쓰기 권한이 있어야합니다. – rws907

+0

나는 당신이 그것을 조금 더 단순하게 만들 수있는 어떤 의미인지 이해하지 못한다. 나는 이것이 매우 새로운 것이다. –

답변

0

당신은 $ outputDir를 설정해야 '/ tmp를'또는 PHP 스크립트에 기록 할 수있는 뭔가.

스크립트가 명령 줄에서 실행되는 경우 스크립트를 실행하는 사용자에게 쓰기 권한이 필요합니다. 웹 브라우저에서 실행되는 경우 apache 또는 'nobody'에게 쓰기 권한이 필요합니다.

모든 사용자에 대해 쓰기 권한을 설정하려면 chmod -R a+w <outputfolder>을 사용하십시오.

당신이 웹 서버에 액세스 할 수없는 경우, 당신은이 비디오에 따라 FileZilla의를 사용하여 폴더 권한을 설정할 수 있습니다 : 당신은 (file_get_contents을 사용하여 파일의 내용을 얻을) 할 수있는 경우 http://www.youtube.com/watch?v=oq0oM2w9lcQ

그냥 에코 표준 출력으로. 다른 것을 인쇄하지 않으면 브라우저가 파일을 다운로드하라는 메시지를 표시합니다.

+0

웹 브라우저에서 실행 중이며 $ outputDir을 'tmp'로 설정했지만 모든 사용자에게 쓰기 권한을 설정하는 위치를 알지 못합니다. –

+0

temp 폴더는 호스트에 따라 달라집니다 ... ftp 액세스 권한이 있으면 filezilla 또는 대부분의 ftp 클라이언트로 사용자 정의 폴더에 대한 쓰기 권한을 설정할 수 있습니다. – soulfreshner

+0

예 filezilla를 사용 중입니다. 내 컴퓨터의 폴더에 백업을 쓰려고합니다. –

1

나는 그가 IIS와 윈도우 웹 서버를 실행하는 생각 -는 C에 의해 판단 : 스크립트가 여기

을있는 경우 \ Inetput \ wwwroot에 디렉토리 구조는 ... 그래서 윈도우에서 당신은이 방법

에 접근 할 필요가

C:\inetpub\wwwroot\omarejaz\sbyschool\q5.php 

출력 디렉터리에서 적절한 Windows 디렉터리 구조를 사용하여 전체 디렉터리를 지정해야합니다. 이스케이프 문자는 이스케이프 문자와 이스케이프 문자로 PHP에서 이스케이프해야 할 수도 있습니다.

$OutputDir = "C:\\inetpub\\wwwroot\\omarejaz\\sbyschool\\tmp"; 

그런 다음 Windows에서 "tmp"폴더에 대해 IIS가 쓰기 작업을 수행 할 수 있도록 적절한 권한을 설정해야합니다.

관련 문제