2007-09-25
■[MODx]アップロードに関して
日本語などマルチバイトのファイル名で、FCKEditorからアップロードしてしまったとき、画面が表示されなくなってしまうことがある。文字化けしているため、管理画面のファイル管理からも削除できず、所有者が違うためFTPソフトからも削除できない。
このとき、少なくとも日本語ファイル名以外のファイルをきちんと扱えるようになるパッチの当て方。
まず、こちらからパッチをダウンロード。
パッチを当てる。
具体的には
/manager/media/brwoser/mcpuk/connectors/php/Commands/FileUpload.php,line69-
if (array_key_exists("NewFile",$_FILES)) { if ($_FILES['NewFile']['size']<($typeconfig['MaxSize']*1024)) { $filename=basename(str_replace("\\","/",$_FILES['NewFile']['name'])); $lastdot=strrpos($filename,".");
を
if (array_key_exists("NewFile",$_FILES)) { if ($_FILES['NewFile']['size']<($typeconfig['MaxSize']*1024)) { $filename=basename(str_replace("\\","/",rawurlencode($_FILES['NewFile']['name']))); $lastdot=strrpos($filename,".");
に変更。
次に、/manager/media/brwoser/mcpuk/frmresourceslist.html,line24-
<script type="text/javascript" src="js/fckxml.js"></script> <script type="text/javascript" src="js/common.js"></script> <script language="javascript"> var oListManager = new Object() ;
を
<script type="text/javascript" src="js/fckxml.js"></script> <script type="text/javascript" src="js/common.js"></script> <script language="javascript"> function d1(s) {return decodeURIComponent(s);} function d2(s) {return d1(d1(s));} function d3(s) {return d1(d2(s));} var oListManager = new Object() ;
に変更。
line116-
oCell.width = 96 ; oCell.innerHTML = sLink + '<img alt="' + fileName + '" src="' + oConnector.ConnectorUrl + '?Command=Thumbnail&Type=' + oConnector.ResourceType + '&CurrentFolder=' + oConnector.CurrentFolder + '&FileName=' + escape(fileName) + '&ExtraParams=' + oConnector.ExtraParams + '" width="96" height="96" border="0"><br />' + fileName + '</a><br />'; oCell.innerHTML += dLink + '<img border="0" src="images/delete.gif" width="16" height="16" alt="Delete File" title="Delete File"></a> '; oCell.innerHTML += eLink + '<img border="0" src="images/edit.gif" width="16" height="16" alt="Edit/Rename File" title="Rename File"></a>' ;
を
oCell.width = 96 ; oCell.innerHTML = sLink + '<img alt="' + d2(fileName) + '" src="' + oConnector.ConnectorUrl + '?Command=Thumbnail&Type=' + oConnector.ResourceType + '&CurrentFolder=' + oConnector.CurrentFolder + '&FileName=' + fileName + '&ExtraParams=' + oConnector.ExtraParams + '" width="96" height="96" border="0"><br />' + d2(fileName) + '</a><br />'; oCell.innerHTML += dLink + '<img border="0" src="images/delete.gif" width="16" height="16" alt="Delete File" title="Delete File"></a> '; oCell.innerHTML += eLink + '<img border="0" src="images/edit.gif" width="16" height="16" alt="Edit/Rename File" title="Rename File"></a>' ;
に変更。
line136-
if(imageEditable==1 && oConnector.ResourceType.toLowerCase()=="images") { oCell.innerHTML = oCell.innerHTML + '<a href="#" onclick="javascript:window.open(\'' + oConnector.ServerPath + 'manager/media/ImageEditor/editor.php?img=/images' + oConnector.CurrentFolder + fileName + '\',\'win\',\'status=0,toolbar=0\');"><img alt="Edit image" border="0" src="images/editImage.gif" /></a>' ; }
を
if(imageEditable==1 && oConnector.ResourceType.toLowerCase()=="images") { oCell.innerHTML = oCell.innerHTML + '<a href="#" onclick="javascript:window.open(\'' + oConnector.ServerPath + 'manager/media/ImageEditor/editor.php?img=/images' + oConnector.CurrentFolder + escape(fileName) + '\',\'win\',\'status=0,toolbar=0\');"><img alt="Edit image" border="0" src="images/editImage.gif" /></a>' ; }
に変更。
line193-
function DeleteFile( fileName, fileUrl ) { if (confirm('Are you sure you wish to delete ' + unescape(fileName) + '?')) { oConnector.SendCommand( 'DeleteFile', "FileName=" + fileName, DeleteFileCallBack ) ; } } function DeleteFolder( folderName ) { if (confirm('Are you sure you wish to delete ' + unescape(folderName) + ' and all files in it?')) { oConnector.SendCommand( 'DeleteFolder', "FolderName=" + folderName, DeleteFolderCallBack ) ; } } function RenameFile( fileName, fileUrl ) { var promptMsg='Please enter the new name for ' + unescape(fileName) + ':'; var newName=prompt(promptMsg,unescape(fileName)); if ((newName!=null)&&(newName!='')&&(newName!=fileName)) { oConnector.SendCommand( 'RenameFile', "FileName=" + fileName + "&NewName=" + escape( newName ), RenameFileCallBack ) ; } }
を
function DeleteFile( fileName, fileUrl ) { if (confirm('Are you sure you wish to delete ' + d3(fileName) + '?')) { oConnector.SendCommand( 'DeleteFile', "FileName=" + d(fileName), DeleteFileCallBack ) ; } } function DeleteFolder( folderName ) { if (confirm('Are you sure you wish to delete ' + d3(folderName) + ' and all files in it?')) { oConnector.SendCommand( 'DeleteFolder', "FolderName=" + d2(folderName), DeleteFolderCallBack ) ; } } function RenameFile( fileName, fileUrl ) { var promptMsg='Please enter the new name for ' + d3(fileName) + ':'; var newName=prompt(promptMsg,(fileName)); if ((newName!=null)&&(newName!='')&&(newName!=fileName)) { oConnector.SendCommand( 'RenameFile', "FileName=" + fileName + "&NewName=" + escape( newName ), RenameFileCallBack ) ; } }
に変更。
最後に/manager/media/brwoser/mcpuk/connectors/php/Commands/GetFoldersAndFiles.php,line102-
if (!$hide) { if ($this->fckphp_config['ResourceAreas'][$this->type]['AllowImageEditing']) $editable=$this->isImageEditable($this->real_cwd."/".$files[$i]); echo "\t\t<File name=\"".htmlentities($files[$i])."\" size=\"".ceil(filesize($this->real_cwd."/".$files[$i])/1024)."\" editable=\"" . ( $editable?"1":"0" ) . "\" />\n"; }
を
if (!$hide) { if ($this->fckphp_config['ResourceAreas'][$this->type]['AllowImageEditing']) $editable=$this->isImageEditable($this->real_cwd."/".$files[$i]); echo "\t\t<File name=\"".htmlentities(rawurlencode($files[$i]))."\" size=\"".ceil(filesize($this->real_cwd."/".$files[$i])/1024)."\" editable=\"" . ( $editable?"1":"0" ) . "\" />\n"; }
に変更。
各ファイルをアップロード、上書きする。
試してみたところ、ファイルの削除などはできなかったが、日本語名ファイルをアップロードした後、同フォルダ内が真っ白になっていたのが他のファイルは見えるようになったので、操作には問題がないと判断できる。便利といえば便利かも。