PHP에서의 상대 경로
이미 알고 계시듯이, file_get_contents 함수의 매개변수에는
파일 이름을 써야 합니다. 그러나 이것은 읽어야 할 파일이
우리 스크립트가 실행되는 폴더와 동일한 폴더에 있을 때만
작동합니다.
파일이 다른 곳에 있다면, 함수 매개변수에 해당 파일까지의 경로를 써야 합니다.
예제를 통해 살펴보겠습니다.
예제
다음과 같은 파일 구조가 있다고 가정해 봅시다:
- index.php
- /directory/
- test.txt
텍스트 파일의 내용을 읽어봅시다. 이를 위해서는 파일 이름 외에도 파일이 위치한 폴더를 지정해야 합니다:
<?php
echo file_get_contents('directory/test.txt');
?>
예제
다음과 같은 파일 구조가 있다고 가정해 봅시다:
- /script/
- index.php
- test.txt
이 경우 경로에 파일 이름만 지정하여 파일을 읽으려고 하면 오류가 발생하게 됩니다:
<?php
echo file_get_contents('test.txt'); // 오류를 발생시킵니다
?>
왜 오류가 발생할까요? 문제는 우리가 함수 매개변수에 파일 이름만 적었다는 점입니다. 이는 읽어야 할 파일이 실행되는 파일과 같은 폴더에 위치해야 한다는 것을 의미합니다.
그러나 우리가 읽어야 할 파일은 한 단계 위, 즉 스크립트가 있는 폴더를 포함하는 상위 폴더에 있습니다.
이 경우 파일 경로에 명시적으로
파일을 한 단계 위에서 찾아야 한다고 표시해야 합니다.
이를 위해 파일 이름 앞에 ../를 써야 합니다.
이렇게 해 봅시다:
<?php
echo file_get_contents('../test.txt'); // 파일이 읽힙니다
?>
예제
다음과 같은 파일 구조가 있다고 가정해 봅시다:
- /script/
- index.php
- /directory/
- test.txt
이 경우 파일을 읽을 때 먼저 한 단계 위로 올라간 다음, 그 레벨을 기준으로 파일까지의 경로를 지정합니다:
<?php
echo file_get_contents('../directory/test.txt');
?>
예제
다음과 같은 파일 구조가 있다고 가정해 봅시다:
- /script/
- /test/
- index.php
- /test/
- /directory/
- test.txt
이 경우 두 단계 위로 올라가야 합니다:
<?php
echo file_get_contents('../../directory/test.txt');
?>
실습 문제
텍스트 파일의 내용을 읽는 코드를 작성하세요:
- index.php
- /dir1/
- /dir2/
- test.txt
- /dir2/
텍스트 파일의 내용을 읽는 코드를 작성하세요:
- /script/
- index.php
- /dir1/
- /dir2/
- test.txt
- /dir2/
텍스트 파일의 내용을 읽는 코드를 작성하세요:
- /script1/
- /script2/
- index.php
- /script2/
- /dir/
- test.txt
텍스트 파일의 내용을 읽는 코드를 작성하세요:
- /script1/
- /script2/
- /script3/
- index.php
- /script3/
- /script2/
- /dir1/
- /dir2/
- /dir3/
- test.txt
- /dir3/
- /dir2/