Revision 2045
Added by Dietmar almost 11 years ago
AccessFileHelper.php | ||
---|---|---|
22 | 22 |
* |
23 | 23 |
* @category Core |
24 | 24 |
* @package Core_Routing |
25 |
* @copyright M.v.d.Decken <manuela@isteam.de> |
|
26 |
* @author M.v.d.Decken <manuela@isteam.de> |
|
25 |
* @subpackage Accessfiles |
|
26 |
* @copyright Manuela v.d.Decken <manuela@isteam.de> |
|
27 |
* @author Manuela v.d.Decken <manuela@isteam.de> |
|
27 | 28 |
* @license http://www.gnu.org/licenses/gpl.html GPL License |
28 | 29 |
* @version 0.0.1 |
29 | 30 |
* @revision $Revision: $ |
... | ... | |
32 | 33 |
* @since File available since 01.08.2013 |
33 | 34 |
* @description this class provides some helper methodes to handle access files |
34 | 35 |
*/ |
35 |
|
|
36 |
if (class_exists('AccesFile')) {;} |
|
36 | 37 |
class AccessFileHelper { |
37 | 38 |
|
38 | 39 |
/** |
... | ... | |
70 | 71 |
*/ |
71 | 72 |
static public function isAccessFile($sFileName) |
72 | 73 |
{ |
74 |
if (!is_readable($sFileName)) { throw new AccessFileInvalidFilePathException('invalid filename ['.$sFileName.']'); |
|
73 | 75 |
$bRetval = false; |
74 |
if (($sFile = file_get_contents($sFileName)) !== false) |
|
75 |
{ |
|
76 |
if (($sFile = file_get_contents($sFileName)) !== false) { |
|
76 | 77 |
$sPattern = '/^\s*?<\?php.*?\$i?page_?id\s*=\s*[0-9]+;.*?(?:require|include)' |
77 |
. '(?:_once)?\s*\(\s*\'.*?index\.php\'\s?\);/siU';
|
|
78 |
. '(?:_once)?\s*\(\s*\'.*?index\.php\'\s?\);/siU';
|
|
78 | 79 |
$bRetval = (bool) preg_match($sPattern, $sFile); |
79 | 80 |
unset($sFile); |
80 | 81 |
} |
81 | 82 |
return $bRetval; |
82 |
} |
|
83 |
} |
|
84 |
} |
|
83 | 85 |
/** |
84 | 86 |
* Delete all contents of basedir, but not the basedir itself |
85 | 87 |
* @param string $sRootDir the content of which should be deleted |
... | ... | |
92 | 94 |
$oReg = WbAdaptor::getInstance(); |
93 | 95 |
self::$aDelTreeLog = array(); |
94 | 96 |
$bResult = true; |
95 |
if (!is_writeable($sRootDir)) |
|
96 |
{ |
|
97 |
if (!is_writeable($sRootDir)) { |
|
97 | 98 |
self::$aDelTreeLog[] = 'insufficient rights or directory not empty in : '.str_replace($oReg->AppPath, '', $sRootDir); |
98 | 99 |
return false; |
99 | 100 |
} |
100 | 101 |
$oIterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($sRootDir), RecursiveIteratorIterator::CHILD_FIRST); |
101 |
foreach ($oIterator as $oPath) |
|
102 |
{ |
|
102 |
foreach ($oIterator as $oPath) { |
|
103 | 103 |
$sPath = rtrim(str_replace('\\', '/', $oPath->__toString()), '/'); |
104 |
if ($oPath->isDir() && !preg_match('/\.$/s', $sPath)) |
|
105 |
{ |
|
104 |
if ($oPath->isDir() && !preg_match('/\.$/s', $sPath)) { |
|
106 | 105 |
// proceed directories |
107 |
if (!rmdir($sPath)) |
|
108 |
{ |
|
106 |
if (!rmdir($sPath)) { |
|
109 | 107 |
$bResult = false; |
110 | 108 |
self::$aDelTreeLog[] = 'insufficient rights or directory not empty in : '.str_replace($oReg->AppPath, '', $sPath); |
111 |
}else { |
|
109 |
} else {
|
|
112 | 110 |
self::$aDelTreeLog[] = 'Directory successful removed : '.str_replace($oReg->AppPath, '', $sPath); |
113 | 111 |
} |
114 |
} elseif ($oPath->isFile()) |
|
115 |
{ |
|
112 |
} elseif ($oPath->isFile()) { |
|
116 | 113 |
// proceed files |
117 |
if (!unlink($sPath)) |
|
118 |
{ |
|
114 |
if (!unlink($sPath)) { |
|
119 | 115 |
$bResult = false; |
120 | 116 |
self::$aDelTreeLog[] = 'insufficient rights or directory not empty in : '.str_replace($oReg->AppPath, '', $sPath); |
121 |
}else { |
|
117 |
} else {
|
|
122 | 118 |
self::$aDelTreeLog[] = 'File successful deleted : '.str_replace($oReg->AppPath, '', $sPath); |
123 | 119 |
} |
124 | 120 |
} |
125 | 121 |
} |
126 |
if (($iMode & self::DEL_ROOT_DELETE)) |
|
127 |
{ |
|
128 |
if ($bResult) |
|
129 |
{ // if there was no error before |
|
130 |
if (rmdir($sRootDir)) |
|
131 |
{ |
|
122 |
if (($iMode & self::DEL_ROOT_DELETE)) { |
|
123 |
if ($bResult) { // if there was no error before |
|
124 |
if (rmdir($sRootDir)) { |
|
132 | 125 |
self::$aDelTreeLog[] = 'Directory successful removed : '.str_replace($oReg->AppPath, '', $sRootDir); |
133 | 126 |
return $bResult; |
134 | 127 |
} |
... | ... | |
142 | 135 |
* @param bool $bClearLog TRUE clears the log after request, FALSE preserve the log |
143 | 136 |
* @return array |
144 | 137 |
*/ |
145 |
static function getDelTreeLog($bClearLog = self::LOG_CLEAR) |
|
138 |
static public function getDelTreeLog($bClearLog = self::LOG_CLEAR)
|
|
146 | 139 |
{ |
147 | 140 |
$aRetval = self::$aDelTreeLog; |
148 | 141 |
if($bClearLog) { self::$aDelTreeLog = array(); } |
149 | 142 |
return $aRetval; |
150 | 143 |
} |
151 | 144 |
|
145 |
/* *** following methods still are in developing right now! Do not use it! ************ */ |
|
146 |
|
|
147 |
/** |
|
148 |
* isPathInsideApplication |
|
149 |
* @param string $sRootPath full base path<br /> |
|
150 |
* example1-a: '/www/htdocs/subdir/' |
|
151 |
* example2-a: 'c://www/htdocs/subdir/' |
|
152 |
* example3-a: 'http://user:pass@isteam.de:123/www/htdocs/subdir/' |
|
153 |
* @param string $sFullPath full path to test<br /> |
|
154 |
* example1-b: '/www/htdocs/subdir/targetdir/../testfile.php' |
|
155 |
* example2-b: 'c://www/htdocs/subdir/targetdir/../testfile.php' |
|
156 |
* example3-b: 'http://user:pass@isteam.de:123/www/htdocs/subdir/targetdir/../testfile.php' |
|
157 |
* @return type |
|
158 |
*/ |
|
159 |
static public function isRootPartOfPath($sRootPath, $sFullPath) |
|
160 |
{ |
|
161 |
$sRootPath = self::getRealPath($sRootPath); |
|
162 |
$sFullPath = self::getRealPath($sFullPath); |
|
163 |
$sRetval = (preg_match('/^'.preg_quote($sRootPath, '/').'/', $sFullPath) ? $sFullPath : null ); |
|
164 |
return $sRetval;; |
|
165 |
} |
|
166 |
|
|
167 |
static public function getRealPath($sPath) |
|
168 |
{ |
|
169 |
$iCount = 0; |
|
170 |
$aResultPath = array(); |
|
171 |
$sPath = str_replace(array('\\', '/./'), array('/', '/'), $sPath); |
|
172 |
if(preg_match('/^\/?\.\//', $sPath)) { |
|
173 |
$sPath = str_replace('\\', '/', getcwd()).'/'.preg_replace('/^\/?\.\//', '', $sPath); |
|
174 |
} |
|
175 |
|
|
176 |
$sPattern = '/((?:^[a-z]?\:\/+)|(?:^.*?\:\/\/.*?\/)|(?:^\/+))[^\/].*$/is'; |
|
177 |
// extract host/root - part from path save and then remove it from path |
|
178 |
$sPrefix = preg_replace($sPattern, '\1', $sPath); |
|
179 |
$sPath = preg_replace('/^'.preg_quote($sPrefix, '/').'/', '', $sPath); |
|
180 |
// replace any tripple or more dots by doubble dots and split the path at '/' into an array. |
|
181 |
// save number of replaced .. in $iCount and add somme buffer elements |
|
182 |
$aTestPath = array_merge(($iCount ? array_fill(0, $iCount * 2, '###') : array()), |
|
183 |
explode('/', preg_replace(array('/\.{2,}/s', '/./'), array('..', '/'), $sPath, -1, $iCount)) |
|
184 |
); |
|
185 |
foreach ($aTestPath as $sPart) { |
|
186 |
switch ($sPart) { |
|
187 |
case '.': // skip part |
|
188 |
continue; |
|
189 |
break; |
|
190 |
case '..': // step back |
|
191 |
array_pop($aResultPath); |
|
192 |
break; |
|
193 |
default: // take part |
|
194 |
$aResultPath[] = $sPart; |
|
195 |
break; |
|
196 |
} |
|
197 |
} |
|
198 |
while($aResultPath[0] == '###') { |
|
199 |
array_shift($aResultPath); |
|
200 |
} |
|
201 |
$sResultPath = $sPrefix.implode('/', $aResultPath); |
|
202 |
return $sResultPath; |
|
203 |
} |
|
204 |
|
|
205 |
|
|
152 | 206 |
} // end of class AccessFileHelper |
Also available in: Unified diff
! update Access Files Classes with easier handling
for modules who create their own accessfiles