ファイル管理不具合:権限がない子ディレクトリが一つでもあると使えない
Posted: 2017年4月01日(土) 13:41
MODX1.0.18J
「エレメント」>「ファイル管理」について、
権限のない子ディレクトリが一つでも存在すると(その子ディレクトリを開こうとしなくても、それ以前に)、
親ディレクトリが表示できない。という不具合があります。
特に、ドキュメントルート直下に権限の無い子ディレクトリが一つでも存在すると、
「ファイル管理」が全く使えない(いきなりエラーで止まる)という状況です。
具体的には、
現在の表示対象となるディレクトリに子ディレクトリが存在していると、
manager/actions/element/files.dynamic.php
の486行目の「scandir」が、無条件に子ディレクトリの中を覗きに行くため、
当然ながら権限がないディレクトリであれば、そこでエラーになって止まってしまう。
という現象のようです。
とりあえず、対症療法として、
486行目~496行目を、
のように変更したところ、
上記の現象を回避することはできました。
(「@」を付けて、直接エラーで止まらないようにしています)
「エレメント」>「ファイル管理」について、
権限のない子ディレクトリが一つでも存在すると(その子ディレクトリを開こうとしなくても、それ以前に)、
親ディレクトリが表示できない。という不具合があります。
特に、ドキュメントルート直下に権限の無い子ディレクトリが一つでも存在すると、
「ファイル管理」が全く使えない(いきなりエラーで止まる)という状況です。
具体的には、
現在の表示対象となるディレクトリに子ディレクトリが存在していると、
manager/actions/element/files.dynamic.php
の486行目の「scandir」が、無条件に子ディレクトリの中を覗きに行くため、
当然ながら権限がないディレクトリであれば、そこでエラーになって止まってしまう。
という現象のようです。
とりあえず、対症療法として、
486行目~496行目
コード: 全て選択
$dfiles = scandir($newpath);
foreach($dfiles as $i=>$infile)
{
switch($infile)
{
case '..':
case '.':
unset($dfiles[$i]);
break;
}
}
コード: 全て選択
$dfiles = @scandir($newpath);
if ($dfiles)
{
foreach($dfiles as $i=>$infile)
{
switch($infile)
{
case '..':
case '.':
unset($dfiles[$i]);
break;
}
}
}
上記の現象を回避することはできました。
(「@」を付けて、直接エラーで止まらないようにしています)