2015-01-29 3 views
1

API를 RESTful 웹 서비스로 구현하고 데이터 저장소로 SQLite를 사용하는 PHP 애플리케이션이 있습니다. 관련 소프트웨어 버전은 다음과 같습니다PHP 내장 서버에서 실행되는 스크립트에 값 전달

  • PHP : PHP 5.4.30 (CLI) (내장 : 2014년 7월 29일이 23시 43분 29초)
  • SQLite는 : 3.7.13
  • phpunit을 : 4.3.4
  • 나는이 두 가지 영역에서 응용 프로그램을 테스트합니다 phpunit을 사용하고

: 각 클래스의 메서드

  1. 테스트.
  2. 웹 서비스 URL을 테스트합니다 (예 : GET /items/1은 항목 1의 JSON 표현을 반환합니다). 모든 phpunit을 내에서 처리되고 나는 시험의 시작에서 생성 된 테스트 데이터베이스의 경로를 포함 phpunit.xml 구성 파일을 (사용하여 주어진 값에 상수를 설정할 수 있습니다 각 클래스의 메서드를 테스트

쉽습니다 실행하고 데이터는 각 테스트마다 재설정됩니다). phpunit을 완료 할 때 그것을 죽일 수 있도록 부트 스트랩 스크립트는 서버 프로세스의 ID를 저장

php -S localhost:8000 -t ./htdocs

: 웹 서비스를 테스트하기 위해 나는이 내장 된 서버 지금처럼 PHP를 시작하는 부트 스트랩 스크립트가 . 이 모든 것은 내가 기대하는대로 작동합니다.

내가 가지고있는 문제는 웹 서비스를 테스트 할 때 테스트 데이터베이스를 사용하고 프로덕션에서 라이브 데이터베이스를 사용하고 두 데이터베이스가 다른 경로를 사용하기를 원합니다. 현재 프로덕션 데이터베이스 경로는 config.php 파일의 상수로 정의되지만, PHPUnit을 실행할 때이를 대체하려고합니다. 이상적으로는 다음과 같은 것을 사용하여 내장 서버를 통해 값을 전달하고 싶습니다 : DATABASE_PATH 웹 서비스를 실행하는 PHP 코드에서 상수로 나타납니다

php -S localhost:8000 -t ./htdocs -D DATABASE_PATH=/path/to/sqlite.db

. 그런 다음 경로가 이미 지정된 경우 if (!defined('DATABASE_PATH') 검사를 사용하여 실제 데이터베이스 경로를 제공 할 수 있습니다. 내장 서버를 사용하여이를 수행 할 수있는 방법이 있습니까? php에 대한 메뉴얼 페이지를 확인했지만,이 기능을 제공하는 모든 인수를 찾을 수 있습니다. 가장 근접한 것은 INI 항목을 정의하기 위해 -d입니다.

다른 방법으로는 잘못된 방향으로 가고 동일한 것을 달성하는 또 다른 (더 좋은) 방법이 있습니까?문서에 따르면

답변

0

http://php.net/manual/en/features.commandline.webserver.php

당신이 호출 할 수

$ php -S localhost:8000 router.php 

router.php은 (문서 페이지에서 복사) 등의 운영자 파일입니다 :

<?php 
// router.php 
if (php_sapi_name() == 'cli-server') { 
    /* route static assets and return false */ 
} 
/* go on with normal index.php operations */ 
?> 

그래서 당신은 cli-server 당신을 발견하면 can

define('PHPUNIT_DATABASE_PATH','path/to/your/database';

해 보셨습니까?

+0

두 개의 서로 다른 위치에서 정의 된 테스트 데이터베이스 경로를 얻었 기 때문에 약간 어색한 느낌이지만 작동합니다. – pwaring

+0

당신은이'if '조건을 직접 원래 설정 파일에 넣고 router.php를 전혀 사용하지 않을 수 있습니다. – Alex

+0

그건 꽤 똑같지는 않습니다 - 저는이 유닛이 실행될 때만이 값을 설정하기를 원합니다 테스트에서 if 블록을 설정 파일에 추가하면 프로덕션 환경의 모든 'require'config.php '호출에서 테스트가 수행됩니다. 또한, 내 config 파일에 두는 것은 여전히 ​​상수 ('config.php'와'phpunit.xml')를 정의하는 두 곳을 가졌다는 것을 의미합니다. – pwaring

관련 문제