101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | if (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])) { | ||
|  |     // called directly
 | ||
|  |     if (isset($_GET['getOutputCompression'])) { | ||
|  |         echo (int)ini_get('zlib.output_compression'); | ||
|  |         exit(); | ||
|  |     } | ||
|  |     if (isset($_GET['hello'])) { | ||
|  |         // try to disable (may not work)
 | ||
|  |         ini_set('zlib.output_compression', '0'); | ||
|  |         echo 'World!'; | ||
|  |         exit(); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | require_once '_inc.php'; | ||
|  | 
 | ||
|  | function test_environment() | ||
|  | { | ||
|  |     global $thisDir; | ||
|  | 
 | ||
|  |     // check DOCROOT
 | ||
|  |     $noSlash = assertTrue( | ||
|  |         0 === preg_match('@[\\\\/]$@', $_SERVER['DOCUMENT_ROOT']) | ||
|  |         ,'environment : DOCUMENT_ROOT should not end in trailing slash' | ||
|  |     ); | ||
|  |     $isRealPath = assertTrue(false !== realpath($_SERVER['DOCUMENT_ROOT']) | ||
|  |         ,'environment : DOCUMENT_ROOT should pass realpath()' | ||
|  |     ); | ||
|  |     $containsThisFile = assertTrue( | ||
|  |         0 === strpos(realpath(__FILE__), realpath($_SERVER['DOCUMENT_ROOT'])) | ||
|  |         ,'environment : DOCUMENT_ROOT should contain this test file' | ||
|  |     ); | ||
|  |     if (! $noSlash || ! $isRealPath || ! $containsThisFile) { | ||
|  |         echo "\nDOCUMENT_ROOT is set to: '{$_SERVER['DOCUMENT_ROOT']}'. If you " | ||
|  |            . "cannot modify this, consider setting \$min_documentRoot in config.php\n\n"; | ||
|  |     } | ||
|  |     if (isset($_SERVER['SUBDOMAIN_DOCUMENT_ROOT'])) { | ||
|  |         echo "\n!NOTE: environment : \$_SERVER['SUBDOMAIN_DOCUMENT_ROOT'] is set. " | ||
|  |            . "You may need to set \$min_documentRoot to this in config.php\n"; | ||
|  |     } | ||
|  |     if (realpath(__FILE__) !== realpath($_SERVER['DOCUMENT_ROOT'] . '/min_unit_tests/test_environment.php')) { | ||
|  |         echo "!NOTE: environment : /min_unit_tests/ is not directly inside DOCUMENT_ROOT\n"; | ||
|  |     } | ||
|  | 
 | ||
|  |     $thisUrl = 'http://' | ||
|  |         . $_SERVER['HTTP_HOST'] // avoid redirects when SERVER_NAME doesn't match
 | ||
|  |         . ('80' === $_SERVER['SERVER_PORT'] ? '' : ":{$_SERVER['SERVER_PORT']}") | ||
|  |         . dirname($_SERVER['REQUEST_URI'])  | ||
|  |         . '/test_environment.php'; | ||
|  |      | ||
|  |     $oc = @file_get_contents($thisUrl . '?getOutputCompression=1'); | ||
|  |      | ||
|  |     if (false === $oc || ! preg_match('/^[01]$/', $oc)) { | ||
|  |         echo "!WARN: environment : Local HTTP request failed. Testing cannot continue.\n"; | ||
|  |         return; | ||
|  |     } | ||
|  |     if ('1' === $oc) { | ||
|  |         echo "!WARN: environment : zlib.output_compression is enabled in php.ini" | ||
|  |            . " or .htaccess.\n"; | ||
|  |     } | ||
|  |      | ||
|  |     $fp = fopen($thisUrl . '?hello=1', 'r', false, stream_context_create(array( | ||
|  |         'http' => array( | ||
|  |             'method' => "GET", | ||
|  |             'header' => "Accept-Encoding: deflate, gzip\r\n" | ||
|  |         ) | ||
|  |     ))); | ||
|  |      | ||
|  |     $meta = stream_get_meta_data($fp); | ||
|  |      | ||
|  |     $passed = true; | ||
|  |     foreach ($meta['wrapper_data'] as $i => $header) { | ||
|  |         if ((preg_match('@^Content-Length: (\\d+)$@i', $header, $m) && $m[1] !== '6') | ||
|  |             || preg_match('@^Content-Encoding:@i', $header, $m) | ||
|  |         ) { | ||
|  |             $passed = false; | ||
|  |             break; | ||
|  |         } | ||
|  |     } | ||
|  |     if ($passed && stream_get_contents($fp) !== 'World!') { | ||
|  |         $passed = false; | ||
|  |     } | ||
|  |     assertTrue( | ||
|  |         $passed | ||
|  |         ,'environment : PHP/server does not auto-HTTP-encode content' | ||
|  |     ); | ||
|  |     fclose($fp); | ||
|  |      | ||
|  |     if (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])) { | ||
|  |         if (! $passed) { | ||
|  |             echo "\nReturned content should be 6 bytes and not HTTP encoded.\n" | ||
|  |                . "Headers returned by: {$thisUrl}?hello=1\n\n"; | ||
|  |             var_export($meta['wrapper_data']); | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | test_environment(); |