PageRenderTime 38ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/tools/compatibility.php

https://bitbucket.org/hanigamal/my-wave-framework
PHP | 442 lines | 286 code | 58 blank | 98 comment | 94 complexity | 7710a8001dd2fb53fabf7375efca1f6f 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.2.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. // Header
  40. echo '<h1>System compatibility</h1>';
  41. echo '<h4 class="highlight">';
  42. foreach($softwareVersions as $software=>$version){
  43. // Adding version numbers
  44. echo '<b>'.$software.'</b> ('.$version.') ';
  45. }
  46. echo '</h4>';
  47. echo '<h2>Reference</h2>';
  48. echo '<div class="border box">';
  49. echo '<span class="bold">SUCCESS</span> Everything is OK<br/>';
  50. echo '<span class="bold orange">WARNING</span> Some functionality might not work or is unavailable<br/>';
  51. echo '<span class="bold red">FAILURE</span> Wave Framework is not meant to work on this system';
  52. echo '</div>';
  53. echo '<h2>Details</h2>';
  54. // Messages are stored in this array
  55. $log=array();
  56. // PHP VERSION
  57. $phpVersion=phpversion();
  58. if($phpVersion){
  59. if(version_compare($phpVersion,'5.3.0')>=0){
  60. $log[]='<span class="bold">SUCCESS</span>: PHP is running version 5.3 or newer';
  61. } else {
  62. $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';
  63. }
  64. } else {
  65. $log[]='<span class="bold orange">WARNING</span>: Unable to detect PHP version number, Wave Framework requires PHP version 5.3 or above';
  66. }
  67. // SHORT OPEN TAG
  68. if(function_exists('ini_get') && ini_get('short_open_tag')==1){
  69. $log[]='<span class="bold">SUCCESS</span>: PHP setting short_open_tag is enabled';
  70. } else {
  71. $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';
  72. }
  73. // PDO
  74. // PDO
  75. if(extension_loaded('PDO')){
  76. $log[]='<span class="bold">SUCCESS</span>: PDO is supported';
  77. } else {
  78. $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';
  79. }
  80. // PDO MYSQL
  81. if(extension_loaded('pdo_mysql')){
  82. $log[]='<span class="bold">SUCCESS</span>: PDO MySQL is supported';
  83. } else {
  84. $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';
  85. }
  86. // PDO SQLITE
  87. if(extension_loaded('pdo_sqlite')){
  88. $log[]='<span class="bold">SUCCESS</span>: PDO SQLite is supported';
  89. } else {
  90. $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';
  91. }
  92. //PDO POSTGRESQL
  93. if(extension_loaded('pdo_pgsql')){
  94. $log[]='<span class="bold">SUCCESS</span>: PDO PostgreSQL is supported';
  95. } else {
  96. $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';
  97. }
  98. //PDO ORACLE
  99. if(extension_loaded('pdo_oci')){
  100. $log[]='<span class="bold">SUCCESS</span>: PDO Oracle is supported';
  101. } else {
  102. $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';
  103. }
  104. //PDO MSSQL
  105. if(extension_loaded('pdo_mssql')){
  106. $log[]='<span class="bold">SUCCESS</span>: PDO MSSQL is supported';
  107. } else {
  108. $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';
  109. }
  110. // ZLIB
  111. if(extension_loaded('Zlib')){
  112. $log[]='<span class="bold">SUCCESS</span>: Zlib is supported';
  113. } else {
  114. $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';
  115. }
  116. // APC
  117. if(extension_loaded('apc')){
  118. $log[]='<span class="bold">SUCCESS</span>: APC is supported';
  119. } else {
  120. $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';
  121. }
  122. // XML
  123. if(extension_loaded('SimpleXML')){
  124. $log[]='<span class="bold">SUCCESS</span>: SimpleXML is supported';
  125. } else {
  126. $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';
  127. }
  128. // CURL AND URL OPEN
  129. if(extension_loaded('curl')){
  130. $log[]='<span class="bold">SUCCESS</span>: cURL is supported';
  131. } else {
  132. if(function_exists('ini_get') && ini_get('allow_url_fopen')==1){
  133. $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';
  134. } else {
  135. $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';
  136. }
  137. }
  138. // FILEINFO
  139. if(extension_loaded('fileinfo')){
  140. $log[]='<span class="bold">SUCCESS</span>: Fileinfo is supported';
  141. } else {
  142. $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';
  143. }
  144. // MCRYPT
  145. if(extension_loaded('mcrypt')){
  146. $log[]='<span class="bold">SUCCESS</span>: Mcrypt is supported';
  147. } else {
  148. $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';
  149. }
  150. // ZIP
  151. if(extension_loaded('Zip')){
  152. $log[]='<span class="bold">SUCCESS</span>: Zip is supported';
  153. } else {
  154. $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';
  155. }
  156. // FTP
  157. if(extension_loaded('ftp')){
  158. $log[]='<span class="bold">SUCCESS</span>: FTP is supported';
  159. } else {
  160. $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';
  161. }
  162. // FTP
  163. if(extension_loaded('memcache')){
  164. $log[]='<span class="bold">SUCCESS</span>: Memcache is supported';
  165. } else {
  166. $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';
  167. }
  168. // GD LIBRARY
  169. if(extension_loaded('gd')){
  170. $log[]='<span class="bold">SUCCESS</span>: GD Graphics Library is supported';
  171. } else {
  172. $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';
  173. }
  174. // APACHE AND NGINX
  175. if(strpos($_SERVER['SERVER_SOFTWARE'],'Apache')!==false){
  176. $log[]='<span class="bold">SUCCESS</span>: Apache server is used';
  177. // APACHE URL REWRITES
  178. if(file_exists('.htaccess')){
  179. // .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
  180. if(isset($_GET['rewrite_enabled'])){
  181. $log[]='<span class="bold">SUCCESS</span>: Apache mod_rewrite extension is supported';
  182. } else {
  183. $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';
  184. }
  185. } else {
  186. $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';
  187. }
  188. // HTACCESS
  189. if(file_exists('..'.DIRECTORY_SEPARATOR.'.htaccess')){
  190. $log[]='<span class="bold">SUCCESS</span>: .htaccess file is present';
  191. } else {
  192. $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';
  193. }
  194. } else if(strpos($_SERVER['SERVER_SOFTWARE'],'nginx')!==false){
  195. $log[]='<span class="bold">SUCCESS</span>: Nginx server is used';
  196. // NGINX URL REWRITES
  197. // This only works if the /nginx.conf location setting for compatibility script is used in Nginx server configuration
  198. if(isset($_GET['rewrite_enabled'])){
  199. $log[]='<span class="bold">SUCCESS</span>: Nginx HttpRewriteModule is supported';
  200. } else {
  201. $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';
  202. }
  203. } else {
  204. $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';
  205. }
  206. // FILESYSTEM
  207. // FILESYSTEM ROOT
  208. // No files should really be saved in this folder, but it might be necessary
  209. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  210. $log[]='<span class="bold">SUCCESS</span>: /filesystem/ is writable';
  211. unlink('../filesystem/test.tmp');
  212. } else {
  213. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/ is not writable';
  214. }
  215. // FILESYSTEM CACHE ROOT
  216. // No files should really be saved in this folder, but it might be necessary
  217. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  218. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/ is writable';
  219. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'test.tmp');
  220. } else {
  221. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/ is not writable';
  222. }
  223. // FILESYSTEM IMAGE CACHE
  224. // All dynamically loaded image cache is stored here
  225. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  226. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/images/ is writable';
  227. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'test.tmp');
  228. } else {
  229. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/images/ is not writable';
  230. }
  231. // FILESYSTEM OUTPUT CACHE
  232. // All API response cache is stored here
  233. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  234. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/output/ is writable';
  235. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.'test.tmp');
  236. } else {
  237. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/output/ is not writable';
  238. }
  239. // FILESYSTEM RESOURCE CACHE
  240. // All loaded resources (JavaScript, CSS and so on) in their compressed and/or minified format are cached here
  241. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'resources'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  242. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/resources/ is writable';
  243. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'resources'.DIRECTORY_SEPARATOR.'test.tmp');
  244. } else {
  245. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/resources/ is not writable';
  246. }
  247. // FILESYSTEM CUSTOM CACHE
  248. // Cache created through Factory cache methods
  249. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'custom'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  250. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/custom/ is writable';
  251. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'custom'.DIRECTORY_SEPARATOR.'test.tmp');
  252. } else {
  253. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/custom/ is not writable';
  254. }
  255. // FILESYSTEM CACHE TAGS
  256. // Cache created through Factory cache methods
  257. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'tags'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  258. $log[]='<span class="bold">SUCCESS</span>: /filesystem/cache/tags/ is writable';
  259. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'tags'.DIRECTORY_SEPARATOR.'test.tmp');
  260. } else {
  261. $log[]='<span class="bold red"><span class="bold red">FAILURE</span></span>: /filesystem/cache/tags/ is not writable';
  262. }
  263. // FILESYSTEM MESSENGER
  264. // All the certificates and encryption keys should be stored here
  265. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  266. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'messenger'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  267. $log[]='<span class="bold">SUCCESS</span>: /filesystem/messenger/ is writable';
  268. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'messenger'.DIRECTORY_SEPARATOR.'test.tmp');
  269. } else {
  270. $log[]='<span class="bold orange">WARNING</span>: /filesystem/messenger/ is not writable, this warning can be ignored if state messenger is not used';
  271. }
  272. // FILESYSTEM SESSIONS
  273. // User session cookies
  274. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'sessions'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  275. $log[]='<span class="bold">SUCCESS</span>: /filesystem/sessions/ is writable';
  276. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'sessions'.DIRECTORY_SEPARATOR.'test.tmp');
  277. } else {
  278. $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';
  279. }
  280. // FILESYSTEM KEYS
  281. // All the certificates and encryption keys should be stored here
  282. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  283. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'keys'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  284. $log[]='<span class="bold">SUCCESS</span>: /filesystem/keys/ is writable';
  285. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'keys'.DIRECTORY_SEPARATOR.'test.tmp');
  286. } else {
  287. $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';
  288. }
  289. // FILESYSTEM LIMITER
  290. // 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
  291. // Automatically blocked IP's are also stored here
  292. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'limiter'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  293. $log[]='<span class="bold">SUCCESS</span>: /filesystem/limiter/ is writable';
  294. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'limiter'.DIRECTORY_SEPARATOR.'test.tmp');
  295. } else {
  296. $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';
  297. }
  298. // FILESYSTEM LOG
  299. // This stores all Logger generated log files
  300. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'logs'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  301. $log[]='<span class="bold">SUCCESS</span>: /filesystem/logs/ is writable';
  302. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'logs'.DIRECTORY_SEPARATOR.'test.tmp');
  303. } else {
  304. $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';
  305. }
  306. // FILESYSTEM ERRORS
  307. // This stores all Logger generated log files
  308. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'errors'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  309. $log[]='<span class="bold">SUCCESS</span>: /filesystem/errors/ is writable';
  310. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'errors'.DIRECTORY_SEPARATOR.'test.tmp');
  311. } else {
  312. $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';
  313. }
  314. // FILESYSTEM SESSION TOKENS
  315. // This stores all API sessions and tokens per API profile
  316. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'tokens'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  317. $log[]='<span class="bold">SUCCESS</span>: /filesystem/tokens/ is writable';
  318. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'tokens'.DIRECTORY_SEPARATOR.'test.tmp');
  319. } else {
  320. $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';
  321. }
  322. // FILESYSTEM TEMPORARY FILES
  323. // Various temporary files should be stored here
  324. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  325. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  326. $log[]='<span class="bold">SUCCESS</span>: /filesystem/tmp/ is writable';
  327. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'test.tmp');
  328. } else {
  329. $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';
  330. }
  331. // FILESYSTEM USERDATA
  332. // Various user uploaded files should be stored here
  333. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  334. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'userdata'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  335. $log[]='<span class="bold">SUCCESS</span>: /filesystem/userdata/ is writable';
  336. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'userdata'.DIRECTORY_SEPARATOR.'test.tmp');
  337. } else {
  338. $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';
  339. }
  340. // BACKUPS
  341. // System backups are stored here
  342. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  343. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'backups'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  344. $log[]='<span class="bold">SUCCESS</span>: /filesystem/backups/ is writable';
  345. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'backups'.DIRECTORY_SEPARATOR.'test.tmp');
  346. } else {
  347. $log[]='<span class="bold orange">WARNING</span>: /filesystem/backups/ is not writable, this means that default update script cannot store backup archives when used';
  348. }
  349. // STATIC
  350. // Static uploads are stored here
  351. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  352. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'static'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  353. $log[]='<span class="bold">SUCCESS</span>: /filesystem/static/ is writable';
  354. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'static'.DIRECTORY_SEPARATOR.'test.tmp');
  355. } else {
  356. $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';
  357. }
  358. // UPDATES
  359. // Update archives are stored here
  360. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  361. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'updates'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  362. $log[]='<span class="bold">SUCCESS</span>: /filesystem/updates/ is writable';
  363. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'updates'.DIRECTORY_SEPARATOR.'test.tmp');
  364. } else {
  365. $log[]='<span class="bold orange">WARNING</span>: /filesystem/updates/ is not writable, this means that default update script cannot store update archives when used';
  366. }
  367. // FILESYSTEM DATA
  368. // Various databases (like SQLite) should be stored here
  369. // Wave Framework itself does not use this folder and this should be used by developer, if necessary
  370. if(file_put_contents('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'test.tmp','1')){
  371. $log[]='<span class="bold">SUCCESS</span>: /filesystem/data/ is writable';
  372. unlink('..'.DIRECTORY_SEPARATOR.'filesystem'.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'test.tmp');
  373. } else {
  374. $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';
  375. }
  376. // Printing out the log
  377. echo '<p>';
  378. echo implode('</p><p>',$log);
  379. echo '</p>';
  380. // Footer
  381. echo '<p class="footer small bold">Generated at '.date('d.m.Y h:i').' GMT '.date('P').' for '.$_SERVER['HTTP_HOST'].'</p>';
  382. ?>
  383. </body>
  384. </html>