3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
15 if (defined('_TEST_DIRS')) return;
16 define('_TEST_DIRS', "1");
18 include_spip('inc/minipres');
19 utiliser_langue_visiteur();
24 // http://doc.spip.org/@test_ecrire
25 function test_ecrire($my_dir) {
29 $script = @file_exists
('spip_loader.php') ?
'spip_loader.php' : $_SERVER['PHP_SELF'];
30 $self = basename($script);
31 $uid = @fileowner
('.');
32 $uid2 = @fileowner
($self);
33 $gid = @filegroup
('.');
34 $gid2 = @filegroup
($self);
35 $perms = @fileperms
($self);
37 // Comparer l'appartenance d'un fichier cree par PHP
38 // avec celle du script et du repertoire courant
41 spip_unlink('test'); // effacer au cas ou
43 if ($uid > 0 && $uid == $uid2 && @fileowner
('test') == $uid)
45 else if ($gid > 0 && $gid == $gid2 && @filegroup
('test') == $gid)
49 // Appliquer de plus les droits d'acces du script
51 $perms = ($perms & 0777) |
(($perms & 0444) >> 2);
56 $ok = is_dir($my_dir) && is_writable($my_dir);
58 return $ok ?
$chmod : false;
62 // tester les droits en ecriture sur les repertoires
63 // rajouter celui passe dans l'url ou celui du source (a l'installation)
66 // http://doc.spip.org/@install_etape_chmod_dist
67 function install_etape_chmod_dist()
70 $test_dir = _request('test_dir');
74 if (substr($test_dir,-1)!=='/') $test_dir .= '/';
75 if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE
. $test_dir;
78 $test_dirs[] = _DIR_CONNECT
;
79 $test_dirs[] = _DIR_CHMOD
;
84 $absent_dirs = array();;
86 while (list(, $my_dir) = each($test_dirs)) {
87 $test = test_ecrire($my_dir);
89 $m = preg_replace(',^' . _DIR_RACINE
. ',', '',$my_dir);
90 if (@file_exists
($my_dir)) {
91 $bad_dirs["<li>".$m."</li>"] = 1;
93 $absent_dirs["<li>".$m."</li>"] = 1;
94 } else $chmod = max($chmod, $test);
97 if ($bad_dirs OR $absent_dirs) {
100 $titre = _T('dirs_preliminaire');
101 $continuer = ' '._T('dirs_commencer') . '.';
103 $titre = _T('dirs_probleme_droits');
106 $res = "<div align='right'>". menu_langues('var_lang_ecrire')."</div>\n";
110 _T('dirs_repertoires_suivants',
111 array('bad_dirs' => join("\n", array_keys($bad_dirs)))) .
112 "<b>". _T('login_recharger')."</b>.";
117 _T('dirs_repertoires_absents',
118 array('bad_dirs' => join("\n", array_keys($absent_dirs)))) .
119 "<b>". _T('login_recharger')."</b>.";
121 $res = "<p>" . $continuer . $res . aide ("install0", true) . "</p>";
123 $t = _T('login_recharger');
124 $t = (!$test_dir ?
"" :
125 "<input type='hidden' name='test_dir' value='$test_dir' />")
126 . "<input type='hidden' name='etape' value='chmod' />"
127 . "<div style='text-align: right'><input type='submit' value='$t' /></div>";
129 echo minipres($titre, $res . generer_form_ecrire('install', $t));
132 $deja = (_FILE_CONNECT
AND analyse_fichier_connection(_FILE_CONNECT
));
134 redirige_url_ecrire("install", "etape=1&chmod=".$chmod);
135 else redirige_url_ecrire();