2014-07-17 2 views
1

나는 WordPress에서 robots.txt 파일의 내용을 가져 오는 기능을 만들고 있습니다. 파일이 없으면 기본 내용으로 만듭니다. 내 옵션 페이지에 사용하겠습니다. 음,이 내 코드, 그것은 파일을 생성 거의 작동해야하지만, 그렇지 않습니다 :PHP - TXT 파일을 읽고 쓰는 기능

function get_robots($robots_file) { 

$robots_file = get_home_path() . 'robots.txt'; //The robots file. 
$dir = get_home_path(); //The root directory 

if(is_file($robots_file)){ 
    $handle = fopen($robots_file, "r"); 
    $robots_content = fread($handle, filesize($robots_file));   
    fclose($handle); 

} else { 
    $default_content = "User-agent: *\nDisallow:"; 
    chmod($dir, 0777); 
    $handle = fopen($robots_file, "w+"); 
    $robots_content = fwrite($handle, $default_content);   
    fclose($handle); 

} 

chmod($dir, 0744); 
return $robots_content; 

} 

나는 문제가 is_file 경우 확실하지 않다, 또는 fopen($robots_file, "w+"은 (는 "R"해야 하는가?) 이후 else. 그리고 권한에 대해 잘 모르겠습니다. 777이 필요한가요? 744가 WordPress의 루트 디렉토리에 대한 기본값입니까?

그리고 나중에 return을 사용하여 변수로 사용할 수 있습니다. fopen이 이미 파일을 만들고 있다고 가정합니다. 내가 맞습니까?

미리 감사드립니다.

+2

사용한다면, 함수 문서를 보면서 시작해야한다 : http://php.net/fopen 그들은 분명히 문서화되어있다. 아, 디렉토리에서 chmod 744를 사용하면 다른 모든 사용자가 chmod를 손상시킬 수 있습니다. dir에 대한 실행 권한을 제거하면 해당 내용을 나열하는 기능이 제거됩니다. 파일 이름이 무엇인지 알면 파일을 읽을 수있는 기능이 제거되지 않습니다. –

답변

2

첫 번째로, 나는 완전히 다른 기능을 사용 하겠지만, 이러한 간단한 작업을 위해서는 file_put_contents()file_get_contents()이 있어야합니다.

그래서 가능한 간단한 해결책은 : 나는 그것을 제거 때문에 어느 시점이 함수 인수로 $robots_file를 전달하는 표시되지 않습니다

function get_robots() { 

$robots_file = get_home_path() . 'robots.txt'; //The robots file. 


if(file_exists($robots_file)){ 
    return file_get_contents($robots_file); 

} else { 
    $default_content = "User-agent: *\nDisallow:"; 
    file_put_contents($robots_file, $default_content); 
    return $default_content; 
} 

} 

. 이 코드가 간단한 지 확인해야합니다.

코드에 표시된대로 $dir 권한을 변경할 이유가 없습니다. 그것은 오히려 수동으로 설정해야하며 당신은 확실히 그 기능에서 루트 디렉토리 권한을 변경해서는 안됩니다.

편집

이 기능이 get_home_path() 사용이 하나가 아마 단지 당신이 다른 방법으로 그것을해야 할 관리자 패널에 사용할 수 있으므로. 당신이 원하는 경우

function get_robots($path) 
{ 
    $robots_file = $path . DIRECTORY_SEPARATOR . 'robots.txt'; //The robots file. 
    if(file_exists($robots_file)){ 
     return file_get_contents($robots_file); 

    } else { 
     $default_content = "User-agent: *\nDisallow:"; 
     file_put_contents($robots_file, $default_content); 
     return $default_content; 
    } 
} 

get_robots(getcwd()); 

(물론, 당신이 다른 파일에 get_robots() 기능을 이동할 수

를이 경우 고려해야하지만 : 당신은 당신의 index.php 파일의 끝에 다음 코드를 추가 할 수 있습니다. 사이트를 볼 때마다이 기능을 실행하고 낭비가 적습니다 (사실 robots.txt 파일을 한 번만 만들길 바랍니다). 예를 들어 robots.php 파일을 만들고 원하는 경우 실행하면 http://yourwordpressurl/robots.php을 실행할 수 있습니다. 물론 전화가 걸릴 것입니다.

+0

감사합니다. Marcin. 존재하지 않기 때문에 파일을 만들어야하는 코드를로드한다고 가정합니다.하지만 작동하지 않습니다. 코드는 functions.php (WordPress)에 있습니다. localhost에서 테스트했습니다. – Gerard

+0

어디서나이 기능을 실행합니까? 이 함수를 실행하려면'get_robots();'를 추가해야합니다. –

+0

Omg, 큰 실패 xD입니다. Btw, 치명적인 오류 : 정의되지 않은 함수 get_home_path()를 호출 중입니다. – Gerard

관련 문제