Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

--TEST-- Test fopen() function : variation: use include path and stream context (absolute ..

Decoded Output download

--TEST--
Test fopen() function : variation: use include path and stream context (absolute directories in path)
--CREDITS--
Dave Kelsey <[email protected]>
--FILE--
<?php
//create the include directory structure
$thisTestDir =  basename(__FILE__, ".php") . ".dir";
mkdir($thisTestDir);
chdir($thisTestDir);

$workingDir = "workdir";
$filename = basename(__FILE__, ".php") . ".tmp";
$scriptDir = __DIR__;
$baseDir = getcwd();
$secondFile = $baseDir."/dir2/".$filename;
$firstFile = "../dir1/".$filename;
$scriptFile = $scriptDir.'/'.$filename;

$newdirs = array("dir1", "dir2", "dir3");
$pathSep = ":";
$newIncludePath = "";
if(substr(PHP_OS, 0, 3) == 'WIN' ) {
   $pathSep = ";";
}
foreach($newdirs as $newdir) {
   mkdir($newdir);
   $newIncludePath .= $baseDir.'/'.$newdir.$pathSep;
}
mkdir($workingDir);
chdir($workingDir);

//define the files to go into these directories, create one in dir2
echo "
--- testing include path ---
";
set_include_path($newIncludePath);
$modes = array("r", "r+", "rt");
foreach($modes as $mode) {
    test_fopen($mode);
}

// remove the directory structure
chdir($baseDir);
rmdir($workingDir);
foreach($newdirs as $newdir) {
   rmdir($newdir);
}

chdir("..");
rmdir($thisTestDir);


function test_fopen($mode) {
   global $scriptFile, $secondFile, $firstFile, $filename;

   // create a file in the middle directory
   $h = fopen($secondFile, "w");
   fwrite($h, "in dir2");
   fclose($h);

   echo "
** testing with mode=$mode **
";
   // should read dir2 file
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "
";

   //create a file in dir1
   $h = fopen($firstFile, "w");
   fwrite($h, "in dir1");
   fclose($h);

   //should now read dir1 file
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "
";

   // create a file in working directory
   $h = fopen($filename, "w");
   fwrite($h, "in working dir");
   fclose($h);

   //should still read dir1 file
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "
";

   unlink($firstFile);
   unlink($secondFile);

   //should read the file in working dir
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "
";

   // create a file in the script directory
   $h = fopen($scriptFile, "w");
   fwrite($h, "in script dir");
   fclose($h);

   //should read the file in script dir
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "
";

   //cleanup
   unlink($filename);
   unlink($scriptFile);

}

?>
--EXPECT--
--- testing include path ---

** testing with mode=r **
in dir2
in dir1
in dir1
in working dir
in script dir

** testing with mode=r+ **
in dir2
in dir1
in dir1
in working dir
in script dir

** testing with mode=rt **
in dir2
in dir1
in dir1
in working dir
in script dir

Did this file decode correctly?

Original Code

--TEST--
Test fopen() function : variation: use include path and stream context (absolute directories in path)
--CREDITS--
Dave Kelsey <[email protected]>
--FILE--
<?php
//create the include directory structure
$thisTestDir =  basename(__FILE__, ".php") . ".dir";
mkdir($thisTestDir);
chdir($thisTestDir);

$workingDir = "workdir";
$filename = basename(__FILE__, ".php") . ".tmp";
$scriptDir = __DIR__;
$baseDir = getcwd();
$secondFile = $baseDir."/dir2/".$filename;
$firstFile = "../dir1/".$filename;
$scriptFile = $scriptDir.'/'.$filename;

$newdirs = array("dir1", "dir2", "dir3");
$pathSep = ":";
$newIncludePath = "";
if(substr(PHP_OS, 0, 3) == 'WIN' ) {
   $pathSep = ";";
}
foreach($newdirs as $newdir) {
   mkdir($newdir);
   $newIncludePath .= $baseDir.'/'.$newdir.$pathSep;
}
mkdir($workingDir);
chdir($workingDir);

//define the files to go into these directories, create one in dir2
echo "\n--- testing include path ---\n";
set_include_path($newIncludePath);
$modes = array("r", "r+", "rt");
foreach($modes as $mode) {
    test_fopen($mode);
}

// remove the directory structure
chdir($baseDir);
rmdir($workingDir);
foreach($newdirs as $newdir) {
   rmdir($newdir);
}

chdir("..");
rmdir($thisTestDir);


function test_fopen($mode) {
   global $scriptFile, $secondFile, $firstFile, $filename;

   // create a file in the middle directory
   $h = fopen($secondFile, "w");
   fwrite($h, "in dir2");
   fclose($h);

   echo "\n** testing with mode=$mode **\n";
   // should read dir2 file
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "\n";

   //create a file in dir1
   $h = fopen($firstFile, "w");
   fwrite($h, "in dir1");
   fclose($h);

   //should now read dir1 file
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "\n";

   // create a file in working directory
   $h = fopen($filename, "w");
   fwrite($h, "in working dir");
   fclose($h);

   //should still read dir1 file
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "\n";

   unlink($firstFile);
   unlink($secondFile);

   //should read the file in working dir
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "\n";

   // create a file in the script directory
   $h = fopen($scriptFile, "w");
   fwrite($h, "in script dir");
   fclose($h);

   //should read the file in script dir
   $h = fopen($filename, $mode, true);
   fpassthru($h);
   fclose($h);
   echo "\n";

   //cleanup
   unlink($filename);
   unlink($scriptFile);

}

?>
--EXPECT--
--- testing include path ---

** testing with mode=r **
in dir2
in dir1
in dir1
in working dir
in script dir

** testing with mode=r+ **
in dir2
in dir1
in dir1
in working dir
in script dir

** testing with mode=rt **
in dir2
in dir1
in dir1
in working dir
in script dir

Function Calls

basename 1

Variables

None

Stats

MD5 0a1d2b24fd71e8b2a8dc01b359fef8e6
Eval Count 0
Decode Time 98 ms