PageRenderTime 61ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/tools/compatibility.php

https://bitbucket.org/kristovaher/wave-framework
PHP | 445 lines | 287 code | 59 blank | 99 comment | 94 complexity | 6c7d3535876e77e8db535a67dba0981e MD5 | raw file
Possible License(s): LGPL-3.0
  1. <?php
  2. /**
  3. * Wave Framework <http://www.waveframework.com>
  4. * System Compatibility Script
  5. *
  6. * This script checks if installation is ready for Wave Framework. It checks for PHP version, whether
  7. * Apache mod_rewrite RewriteEngine or Nginx URL rewriting is turned on and whether filesystem can be
  8. * written to.
  9. *
  10. * @package Tools
  11. * @author Kristo Vaher <kristo@waher.net>
  12. * @copyright Copyright (c) 2012, Kristo Vaher
  13. * @license GNU Lesser General Public License Version 3
  14. * @tutorial /doc/pages/guide_tools.htm
  15. * @since 1.5.1
  16. * @version 3.6.0
  17. */
  18. // This initializes tools and authentication
  19. require('.'.DIRECTORY_SEPARATOR.'tools_autoload.php');
  20. // Log is printed out in plain text format
  21. header('Content-Type: text/html;charset=utf-8');
  22. ?>
  23. <!DOCTYPE html>
  24. <html lang="en">
  25. <head>
  26. <title>Compatibility</title>
  27. <meta charset="utf-8">
  28. <meta name="viewport" content="width=device-width"/>
  29. <link type="text/css" href="style.css" rel="stylesheet" media="all"/>
  30. <link rel="icon" href="../favicon.ico" type="image/x-icon"/>
  31. <link rel="icon" href="../favicon.ico" type="image/vnd.microsoft.icon"/>
  32. <meta content="noindex,nocache,nofollow,noarchive,noimageindex,nosnippet" name="robots"/>
  33. <meta http-equiv="cache-control" content="no-cache"/>
  34. <meta http-equiv="pragma" content="no-cache"/>
  35. <meta http-equiv="expires" content="0"/>
  36. </head>
  37. <body>
  38. <?php
  39. // Pops up an alert about default password
  40. passwordNotification($config['http-authentication-password']);
  41. // Header
  42. echo '<h1>System compatibility</h1>';
  43. echo '<h4 class="highlight">';
  44. foreach($softwareVersions as $software=>$version){
  45. // Adding version numbers
  46. echo '<b>'.$software.'</b> ('.$version.') ';
  47. }
  48. echo '</h4>';
  49. echo '<h2>Reference</h2>';
  50. echo '<div class="border box">';
  51. echo '<span class="bold">SUCCESS</span> Everything is OK<br/>';
  52. echo '<span class="bold orange">WARNING</span> Some functionality might not work or is unavailable<br/>';
  53. echo '<span class="bold red">FAILURE</span> Wave Framework is not meant to work on this system';
  54. echo '</div>';
  55. echo '<h2>Details</h2>';
  56. // Messages are stored in this array
  57. $log=array();
  58. // PHP VERSION
  59. $phpVersion=phpversion();
  60. if($phpVersion){
  61. if(version_compare($phpVersion,'5.3.0')>=0){
  62. $log[]='<span class="bold">SUCCESS</span>: PHP is version 5.3.0 or above (running '.$phpVersion.')';
  63. } else {
  64. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: PHP is running older version than 5.3, Wave Framework has not been tested on older versions of PHP';
  65. }
  66. } else {
  67. $log[]='<span class="bold orange">WARNING</span>: Unable to detect PHP version number, Wave Framework requires PHP version 5.3 or above';
  68. }
  69. // SHORT OPEN TAG
  70. if(function_exists('ini_get') && ini_get('short_open_tag')==1){
  71. $log[]='<span class="bold">SUCCESS</span>: PHP setting short_open_tag is enabled';
  72. } else {
  73. $log[]='<span class="bold orange">WARNING</span>: PHP setting short_open_tag is turned off, default View controller requires this to work properly, if this is not possible then edit /controllers/controller.view.php and example view files in /views/ folder';
  74. }
  75. // PDO
  76. // PDO
  77. if(extension_loaded('PDO')){
  78. $log[]='<span class="bold">SUCCESS</span>: PDO is supported';
  79. } else {
  80. $log[]='<span class="bold orange">WARNING</span>: PDO PHP extension is not supported, this extension is used by default database class, if database connections are not used then this warning can be ignored';
  81. }
  82. // PDO MYSQL
  83. if(extension_loaded('pdo_mysql')){
  84. $log[]='<span class="bold">SUCCESS</span>: PDO MySQL is supported';
  85. } else {
  86. $log[]='<span class="bold orange">WARNING</span>: PDO MySQL PHP extension is not supported, MySQL connections could not be used, if MySQL is not used then this warning can be ignored';
  87. }
  88. // PDO SQLITE
  89. if(extension_loaded('pdo_sqlite')){
  90. $log[]='<span class="bold">SUCCESS</span>: PDO SQLite is supported';
  91. } else {
  92. $log[]='<span class="bold orange">WARNING</span>: PDO SQLite PHP extension is not supported, SQLite connections could not be used, if SQLite is not used then this warning can be ignored';
  93. }
  94. //PDO POSTGRESQL
  95. if(extension_loaded('pdo_pgsql')){
  96. $log[]='<span class="bold">SUCCESS</span>: PDO PostgreSQL is supported';
  97. } else {
  98. $log[]='<span class="bold orange">WARNING</span>: PDO PostgreSQL PHP extension is not supported, PostgreSQL connections could not be used, if PostgreSQL is not used then this warning can be ignored';
  99. }
  100. //PDO ORACLE
  101. if(extension_loaded('pdo_oci')){
  102. $log[]='<span class="bold">SUCCESS</span>: PDO Oracle is supported';
  103. } else {
  104. $log[]='<span class="bold orange">WARNING</span>: PDO Oracle PHP extension is not supported, Oracle connections could not be used, if Oracle is not used then this warning can be ignored';
  105. }
  106. //PDO MSSQL
  107. if(extension_loaded('pdo_mssql')){
  108. $log[]='<span class="bold">SUCCESS</span>: PDO MSSQL is supported';
  109. } else {
  110. $log[]='<span class="bold orange">WARNING</span>: PDO MSSQL PHP extension is not supported, MSSQL connections could not be used, if MSSQL is not used then this warning can be ignored';
  111. }
  112. // ZLIB
  113. if(extension_loaded('Zlib')){
  114. $log[]='<span class="bold">SUCCESS</span>: Zlib is supported';
  115. } else {
  116. $log[]='<span class="bold orange">WARNING</span>: Zlib PHP extension is not supported, this is needed if output compression is used, but system turns it off automatically if extension is not present';
  117. }
  118. // APC
  119. if(extension_loaded('apc')){
  120. $log[]='<span class="bold">SUCCESS</span>: APC is supported';
  121. } else {
  122. $log[]='<span class="bold orange">WARNING</span>: APC PHP extension is not supported, this is not required by Wave Framework, but can improve performance, if supported';
  123. }
  124. // XML
  125. if(extension_loaded('SimpleXML')){
  126. $log[]='<span class="bold">SUCCESS</span>: SimpleXML is supported';
  127. } else {
  128. $log[]='<span class="bold orange">WARNING</span>: SimpleXML PHP extension is not supported, this is not required by Wave Framework, but it is needed if you wish to send direct XML procedure to API';
  129. }
  130. // CURL AND URL OPEN
  131. if(extension_loaded('curl')){
  132. $log[]='<span class="bold">SUCCESS</span>: cURL is supported';
  133. } else {
  134. if(function_exists('ini_get') && ini_get('allow_url_fopen')==1){
  135. $log[]='<span class="bold orange">WARNING</span>: cURL PHP extension is not supported, this is not required by Wave Framework, but is useful when making API requests to other systems that include POST data';
  136. } else {
  137. $log[]='<span class="bold orange">WARNING</span>: cURL PHP extension is not supported and allow_url_fopen setting is also off, these are not required by Wave Framework, but without them you cannot make API requests to other networks';
  138. }
  139. }
  140. // FILEINFO
  141. if(extension_loaded('fileinfo')){
  142. $log[]='<span class="bold">SUCCESS</span>: Fileinfo is supported';
  143. } else {
  144. $log[]='<span class="bold orange">WARNING</span>: Fileinfo PHP extension is not supported, this is used by File Handler, if this is not available then system detects all downloadable files as application/octet-stream';
  145. }
  146. // MCRYPT
  147. if(extension_loaded('mcrypt')){
  148. $log[]='<span class="bold">SUCCESS</span>: Mcrypt is supported';
  149. } else {
  150. $log[]='<span class="bold orange">WARNING</span>: Mcrypt PHP extension is not supported, this is optional and used only when API requests are made with www-crypt-input and www-crypt-output requests';
  151. }
  152. // ZIP
  153. if(extension_loaded('Zip')){
  154. $log[]='<span class="bold">SUCCESS</span>: Zip is supported';
  155. } else {
  156. $log[]='<span class="bold orange">WARNING</span>: Zip PHP extension is not supported, this is required by automatic update script, this warning can be ignored if update script is not used';
  157. }
  158. // FTP
  159. if(extension_loaded('ftp')){
  160. $log[]='<span class="bold">SUCCESS</span>: FTP is supported';
  161. } else {
  162. $log[]='<span class="bold orange">WARNING</span>: FTP PHP extension is not supported, this is required by automatic update script, this warning can be ignored if update script is not used';
  163. }
  164. // FTP
  165. if(extension_loaded('memcache')){
  166. $log[]='<span class="bold">SUCCESS</span>: Memcache is supported';
  167. } else {
  168. $log[]='<span class="bold orange">WARNING</span>: Memcache is not supported, this can be ignored if you do not intend to support Memcache as a caching layer';
  169. }
  170. // GD LIBRARY
  171. if(extension_loaded('gd')){
  172. $log[]='<span class="bold">SUCCESS</span>: GD Graphics Library is supported';
  173. } else {
  174. $log[]='<span class="bold orange">WARNING</span>: GD Graphics Library extension is not supported, this is required for dynamically loaded images, this warning can be ignored if dynamic loading is not used';
  175. }
  176. // APACHE AND NGINX
  177. if(strpos($_SERVER['SERVER_SOFTWARE'],'Apache')!==false){
  178. $log[]='<span class="bold">SUCCESS</span>: Apache server is used';
  179. // APACHE URL REWRITES
  180. if(file_exists('.htaccess')){
  181. // .htaccess in this directory attempts to rewrite compatibility.php into compatibility.php?mod_rewrite_enabled and if this is <span class="bold">SUCCESS</span>ful then mod_rewrite must work
  182. if(isset($_GET['rewrite_enabled'])){
  183. $log[]='<span class="bold">SUCCESS</span>: Apache mod_rewrite extension is supported';
  184. } else {
  185. $log[]='<span class="bold orange">WARNING</span>: Apache mod_rewrite extension is not supported, Index Gateway and mod_rewrite functionality will not work, this warning can be ignored if Index Gateway is not used';
  186. }
  187. } else {
  188. $log[]='<span class="bold orange">WARNING</span>: Cannot test if mod_rewrite and RewriteEngine are enabled, .htaccess file is missing from /tools/ folder, this warning can be ignored if Index Gateway is not used';
  189. }
  190. // HTACCESS
  191. if(file_exists('..'.DIRECTORY_SEPARATOR.'.htaccess')){
  192. $log[]='<span class="bold">SUCCESS</span>: .htaccess file is present';
  193. } else {
  194. $log[]='<span class="bold orange">WARNING</span>: .htaccess file is missing from root folder, Index Gateway and rewrite functionality will not work, this warning can be ignored if Index Gateway is not used';
  195. }
  196. } else if(strpos($_SERVER['SERVER_SOFTWARE'],'nginx')!==false){
  197. $log[]='<span class="bold">SUCCESS</span>: Nginx server is used';
  198. // NGINX URL REWRITES
  199. // This only works if the /nginx.conf location setting for compatibility script is used in Nginx server configuration
  200. if(isset($_GET['rewrite_enabled'])){
  201. $log[]='<span class="bold">SUCCESS</span>: Nginx HttpRewriteModule is supported';
  202. } else {
  203. $log[]='<span class="bold orange">WARNING</span>: Nginx HttpRewriteModule is not supported, Index Gateway and rewrite functionality will not work, this warning can be ignored if Index Gateway is not used';
  204. }
  205. } else {
  206. $log[]='<span class="bold orange">WARNING</span>: Your server is not Apache or Nginx, Index Gateway will not work, this warning can be ignored if Index Gateway is not used';
  207. }
  208. // FILESYSTEM
  209. // FILESYSTEM ROOT
  210. // No files should really be saved in this folder, but it might be necessary
  211. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  212. $log[]='<span class="bold">SUCCESS</span>: /filesystem/ is writable';
  213. unlink('../filesystem/test.tmp');
  214. } else {
  215. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/ is not writable';
  216. }
  217. // FILESYSTEM CACHE ROOT
  218. // No files should really be saved in this folder, but it might be necessary
  219. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  220. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/ is writable';
  221. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'test.tmp');
  222. } else {
  223. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/ is not writable';
  224. }
  225. // FILESYSTEM IMAGE CACHE
  226. // All dynamically loaded image cache is stored here
  227. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  228. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/images/ is writable';
  229. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'test.tmp');
  230. } else {
  231. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/images/ is not writable';
  232. }
  233. // FILESYSTEM OUTPUT CACHE
  234. // All API response cache is stored here
  235. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  236. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/output/ is writable';
  237. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.'test.tmp');
  238. } else {
  239. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/output/ is not writable';
  240. }
  241. // FILESYSTEM RESOURCE CACHE
  242. // All loaded resources (JavaScript, CSS and so on) in their compressed and/or minified format are cached here
  243. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'resources'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  244. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/resources/ is writable';
  245. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'resources'.DIRECTORY_SEPARATOR.'test.tmp');
  246. } else {
  247. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/resources/ is not writable';
  248. }
  249. // FILESYSTEM CUSTOM CACHE
  250. // Cache created through Factory cache methods
  251. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'custom'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  252. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/custom/ is writable';
  253. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'custom'.DIRECTORY_SEPARATOR.'test.tmp');
  254. } else {
  255. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/custom/ is not writable';
  256. }
  257. // FILESYSTEM CACHE TAGS
  258. // Cache created through Factory cache methods
  259. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'tags'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  260. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/tags/ is writable';
  261. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'tags'.DIRECTORY_SEPARATOR.'test.tmp');
  262. } else {
  263. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/tags/ is not writable';
  264. }
  265. // FILESYSTEM MESSENGER
  266. // All the certificates and encryption keys should be stored here
  267. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  268. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'messenger'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  269. $log[]='<span class="bold">SUCCESS</span>: /filesystem/messenger/ is writable';
  270. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'messenger'.DIRECTORY_SEPARATOR.'test.tmp');
  271. } else {
  272. $log[]='<span class="bold orange">WARNING</span>: /filesystem/messenger/ is not writable, this warning can be ignored if state messenger is not used';
  273. }
  274. // FILESYSTEM SESSIONS
  275. // User session cookies
  276. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'sessions'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  277. $log[]='<span class="bold">SUCCESS</span>: /filesystem/sessions/ is writable';
  278. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'sessions'.DIRECTORY_SEPARATOR.'test.tmp');
  279. } else {
  280. $log[]='<span class="bold orange">WARNING</span>: /filesystem/sessions/ is not writable, user session storage is unavailable and session storage will not work, if used';
  281. }
  282. // FILESYSTEM KEYS
  283. // All the certificates and encryption keys should be stored here
  284. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  285. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'keys'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  286. $log[]='<span class="bold">SUCCESS</span>: /filesystem/keys/ is writable';
  287. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'keys'.DIRECTORY_SEPARATOR.'test.tmp');
  288. } else {
  289. $log[]='<span class="bold orange">WARNING</span>: /filesystem/keys/ is not writable, this warning can be ignored if API keys and security features are not used';
  290. }
  291. // FILESYSTEM LIMITER
  292. // All the limiter data (requests per IP and so on) is stored here and is used by Limiter to check for possible denial of service attacks from IP's
  293. // Automatically blocked IP's are also stored here
  294. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'limiter'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  295. $log[]='<span class="bold">SUCCESS</span>: /filesystem/limiter/ is writable';
  296. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'limiter'.DIRECTORY_SEPARATOR.'test.tmp');
  297. } else {
  298. $log[]='<span class="bold orange">WARNING</span>: /filesystem/limiter/ is not writable, this warning can be ignored if Limiter is not used by Index Gateway';
  299. }
  300. // FILESYSTEM LOG
  301. // This stores all Logger generated log files
  302. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'logs'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  303. $log[]='<span class="bold">SUCCESS</span>: /filesystem/logs/ is writable';
  304. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'logs'.DIRECTORY_SEPARATOR.'test.tmp');
  305. } else {
  306. $log[]='<span class="bold orange">WARNING</span>: /filesystem/logs/ is not writable, this warning can be ignored if performance logging is not used by Index Gateway';
  307. }
  308. // FILESYSTEM ERRORS
  309. // This stores all Logger generated log files
  310. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'errors'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  311. $log[]='<span class="bold">SUCCESS</span>: /filesystem/errors/ is writable';
  312. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'errors'.DIRECTORY_SEPARATOR.'test.tmp');
  313. } else {
  314. $log[]='<span class="bold orange">WARNING</span>: /filesystem/errors/ is not writable, it is recommended to keep this folder writable, since it is useful for debugging purposes';
  315. }
  316. // FILESYSTEM SESSION TOKENS
  317. // This stores all API sessions and tokens per API profile
  318. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'tokens'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  319. $log[]='<span class="bold">SUCCESS</span>: /filesystem/tokens/ is writable';
  320. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'tokens'.DIRECTORY_SEPARATOR.'test.tmp');
  321. } else {
  322. $log[]='<span class="bold orange">WARNING</span>: /filesystem/tokens/ is not writable, this warning can be ignored if API keys and security features are not used';
  323. }
  324. // FILESYSTEM TEMPORARY FILES
  325. // Various temporary files should be stored here
  326. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  327. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  328. $log[]='<span class="bold">SUCCESS</span>: /filesystem/tmp/ is writable';
  329. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'test.tmp');
  330. } else {
  331. $log[]='<span class="bold orange">WARNING</span>: /filesystem/tmp/ is not writable, this warning can be ignored if your system does not write anything to that folder';
  332. }
  333. // FILESYSTEM USERDATA
  334. // Various user uploaded files should be stored here
  335. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  336. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'userdata'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  337. $log[]='<span class="bold">SUCCESS</span>: /filesystem/userdata/ is writable';
  338. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'userdata'.DIRECTORY_SEPARATOR.'test.tmp');
  339. } else {
  340. $log[]='<span class="bold orange">WARNING</span>: /filesystem/userdata/ is not writable, this warning can be ignored if your system does not write anything to that folder';
  341. }
  342. // BACKUPS
  343. // System backups are stored here
  344. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  345. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'backups'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  346. $log[]='<span class="bold">SUCCESS</span>: /filesystem/backups/ is writable';
  347. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'backups'.DIRECTORY_SEPARATOR.'test.tmp');
  348. } else {
  349. $log[]='<span class="bold orange">WARNING</span>: /filesystem/backups/ is not writable, this means that default update script cannot store backup archives when used';
  350. }
  351. // STATIC
  352. // Static uploads are stored here
  353. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  354. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'static'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  355. $log[]='<span class="bold">SUCCESS</span>: /filesystem/static/ is writable';
  356. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'static'.DIRECTORY_SEPARATOR.'test.tmp');
  357. } else {
  358. $log[]='<span class="bold orange">WARNING</span>: /filesystem/static/ is not writable, this warning can be ignored if you do not intend to write anything in static folder';
  359. }
  360. // UPDATES
  361. // Update archives are stored here
  362. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  363. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'updates'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  364. $log[]='<span class="bold">SUCCESS</span>: /filesystem/updates/ is writable';
  365. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'updates'.DIRECTORY_SEPARATOR.'test.tmp');
  366. } else {
  367. $log[]='<span class="bold orange">WARNING</span>: /filesystem/updates/ is not writable, this means that default update script cannot store update archives when used';
  368. }
  369. // FILESYSTEM DATA
  370. // Various databases (like SQLite) should be stored here
  371. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  372. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  373. $log[]='<span class="bold">SUCCESS</span>: /filesystem/data/ is writable';
  374. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'test.tmp');
  375. } else {
  376. $log[]='<span class="bold orange">WARNING</span>: /filesystem/data/ is not writable, this warning can be ignored if your system does not write anything to that folder';
  377. }
  378. // Printing out the log
  379. echo '<p>';
  380. echo implode('</p><p>',$log);
  381. echo '</p>';
  382. // Footer
  383. echo '<p class="footer small bold">Generated at '.date('d.m.Y h:i').' GMT '.date('P').' for '.$_SERVER['HTTP_HOST'].'</p>';
  384. ?>
  385. </body>
  386. </html>