source

require_once의 상대 경로가 작동하지 않음

itover 2023. 2. 4. 08:22
반응형

require_once의 상대 경로가 작동하지 않음

나는 다음과 같은 구조를 가지고 있다.

otsg
 > class
   > authentication.php
   > database.php
   > user.php
 > include
   > config.inc.php
   > encryption.php
   > include.php
   > session.php
 > index.php
 > registration.php

포함하다.php 파일에는 다음이 있습니다.

ini_set('display_errors', 1);
error_reporting(E_ALL);

ini_set('include_path',ini_get('include_path').':/Applications/MAMP/htdocs/otsg/:');
require_once 'config.inc.php';
require_once '../class/database.php';
require_once '../class/user.php';
require_once 'encryption.php';
require_once 'session.php';
require_once '../class/authentication.php';

index.php 페이지에 포함시켰습니다.

require_once 'include/include.php';

페이지 index.php를 열면 다음과 같은 경고와 치명적인 오류가 나타납니다.이 에러의 원인을 알 수 없습니다.내가 절대적인 길을 제시하자 효과가 있었다.하지만 절대적인 길은 좋은 생각이 아니야

Warning: require_once(../class/database.php) [function.require-once]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/otsg/include/include.php on line 9

Fatal error: require_once() [function.require]: Failed opening required '../class/database.php' (include_path='.:/Applications/MAMP/bin/php5.3/lib/php:/Applications/MAMP/htdocs/otsg/include/:') in /Applications/MAMP/htdocs/otsg/include/include.php on line 9

잘 부탁드립니다

사용하다

__DIR__

스크립트의 현재 경로를 가져오면 문제가 해결됩니다.

그래서:

require_once(__DIR__.'/../class/user.php');

이렇게 하면 다른 폴더에서 PHP 스크립트를 실행할 수 있으므로 관련 경로가 작동하지 않습니다.

편집: 슬래시 문제가 수정되었습니다.

php 버전 5.2.17의 경우__DIR__php 5.3에서만 동작합니다.

단, 이전 버전의 php의 경우dirname(__FILE__)완벽하게

예를 들면 이렇게 쓰세요.

require_once dirname(__FILE__) . '/db_config.php';

저 같은 경우에는 안 돼요.__DIR__또는getcwd()잘못된 경로를 계속 선택하고 프로젝트의 절대 기본 경로를 사용하여 필요한 모든 파일에 비용 요소를 정의함으로써 해결했습니다.

if(!defined('THISBASEPATH')){ define('THISBASEPATH', '/mypath/'); }
require_once THISBASEPATH.'cache/crud.php';
/*every other require_once you need*/

php 5.4.10을 사용하는 MAMP를 가지고 있으며 폴더 계층은 기본 계층입니다.

q.php 
w.php 
e.php 
r.php 
cache/a.php 
cache/b.php 
setting/a.php 
setting/b.php

....

이 같은 문제를 우연히 발견했는데, 이 문제에서는 모든 것이 정상적으로 동작하고 있었습니다.다른 문제를 포함시킬 때까지입니다.

require_once '../script/pdocrud.php';  //This worked fine up until I had an includes within another includes, then I got this error:
Fatal error: require_once() [function.require]: Failed opening required '../script/pdocrud.php' (include_path='.:/opt/php52/lib/php')

해결 방법 1. (공용 html 폴더 이름의 불필요한 하드코딩은 가능하지만 동작합니다.)

require_once $_SERVER["DOCUMENT_ROOT"] . '/orders.simplystyles.com/script/pdocrud.php';

솔루션 2. (위의 DIR에 대한 불필요한 코멘트는 php 5.3 이후부터 기능하고 있습니다만, 동작하고 있습니다.

require_once __DIR__. '/../script/pdocrud.php';

해결책 3. (어떤 단점도 볼 수 없고, 내 php 5.3에서는 완벽하게 동작한다.)

require_once dirname(__FILE__). '/../script/pdocrud.php';

언급URL : https://stackoverflow.com/questions/5371828/relative-path-in-require-once-doesnt-work

반응형