Hat mir geholfen bei Dateien, die durch Contenido angelegt wurden.
Diese konnten nicht mehr per FTP gelöscht werden. Auch ein CHMOD war nicht mehr möglich.
Das kommt daher, dass der FTp-User und der WWW-User zwar in der gleichen Gruppe sind, aber unterschiedliche Benutzer.
Mit diesem Hack wird nach dem Upload einer Datei die Dateirechte auf 777 gesetzt. Kann man natürlich im Quellcode verändern...
halousi hat geschrieben:und hier ist die lösung!!!
datei "includes/functions.upl.php" durch diesen code ersetzten!
ACHTUNG: bitte backup der "alten" erstellen!!!
Code: Alles auswählen
<?php /***************************************** * File : $RCSfile: functions.upl.php,v $ * Project : Contenido * Descr : Upload functions mit chmod 0777 * * Author : $Author: timo.hummel $ * * Created : 28.12.2003 * Modified : $Date: 2005/10/21 12:13:20 $ $Date: 2005/11/04 12:23:20 by halousi $ * * © four for business AG, www.4fb.de * * $Id: functions.upl.php,v 1.25 2005/10/21 12:13:20 timo.hummel Exp $ ******************************************/ cInclude("classes", "class.upload.php"); cInclude("classes", "class.properties.php"); cInclude("classes", "class.dbfs.php"); function uplDirectoryListRecursive ($currentdir, $startdir=NULL, $files=array(), $depth=-1, $pathstring="") { $depth++; $unsorted_files = array(); if (chdir ($currentdir) == false) { return; } // remember where we started from if (!$startdir) { $startdir = $currentdir; } $d = opendir ("."); //list the files in the dir while ($file = readdir ($d)) { if ($file != ".." && $file != ".") { if (is_dir ($file)) { $unsorted_files[] = $file; } else { } } } if (is_array($unsorted_files)) sort($unsorted_files); $sorted_files = $unsorted_files; if(is_array($sorted_files)) { foreach ($sorted_files as $file) { if ($file != ".." && $file != ".") { if ((filetype(getcwd()."/".$file) == "dir") && (opendir(getcwd()."/".$file) !== false)) { $a_file['name'] = $file; $a_file['depth'] = $depth; $a_file['pathstring'] = $pathstring.$file.'/';; $files[] = $a_file; // If $file is a directory take a look inside $files = uplDirectoryListRecursive (getcwd().'/'.$file, getcwd(), $files, $depth, $a_file['pathstring']); } else { // If $ file is not a directory then do nothing } } } } closedir ($d); chdir ($startdir); return $files; } function upldelete($path, $files) { global $cfgClient, $client, $con_cfg, $db, $cfg; $path = $cfgClient[$client]['upl']['path'].$path; if (!is_array($files)) { $tmp[] = $files; unset($files); $files = $tmp; } $ArrayCount = count($files); for ($i=0; $i<$ArrayCount; $i++) { if (is_dir($path.urldecode($files[$i]))) { // uplrecursivermdir($path.urldecode($files[$i])); uplRecursiveRmDirIfEmpty($path.urldecode($files[$i])); $sql = "DELETE FROM ".$cfg["tab"]["upl"]." WHERE dirname='".$files[$i]."/'"; $db->query($sql); } else { if (file_exists ($cfgClient[$client]["path"]["frontend"].$con_cfg['PathFrontendTmp'].urldecode($files[$i]))) { unlink($cfgClient[$client]["path"]["frontend"].$con_cfg['PathFrontendTmp'].urldecode($files[$i])); } $file_name = urldecode($files[$i]); $sql_dirname = str_replace($cfgClient[$client]['upl']['path'], '', $path); unlink($path.$file_name); $sql = "SELECT idupl FROM ".$cfg["tab"]["upl"]." WHERE idclient='$client' AND filename='$file_name' AND dirname='$sql_dirname'"; $db->query($sql); if ($db->next_record()) { $sql = "DELETE FROM ".$cfg["tab"]["upl"]." WHERE idupl='".$db->f("idupl")."'"; $db->query($sql); } } } } function uplRecursiveRmDirIfEmpty($dir) { global $notification; if(!is_dir($dir)) { return 0; } $directory = @opendir($dir); if (!$directory) { return false; } readdir($directory); while(false !== ($dir_entry = readdir($directory))) { if($dir_entry != "." && $dir_entry != "..") { if (is_dir($dir."/".$dir_entry)) { uplrecursivermdir($dir."/".$dir_entry); } else { $notification->displayNotification("warning", "Im Verzeichnis $dir sind noch Dateien vorhanden. Löschen nicht möglich."); //unlink($dir."/".$dir_entry); } } } closedir($directory); unset($directory); if (@rmdir($dir)) { return 1; } else { return 0; } } function uplHasFiles($dir) { global $client, $cfgClient; $directory = @opendir($cfgClient[$client]["upl"]["path"].$dir); if (!$directory) { return true; } readdir($directory); $ret = false; while(false !== ($dir_entry = readdir($directory))) { if($dir_entry != "." && $dir_entry != "..") { closedir($directory); return (true); } } closedir($directory); unset($directory); return ($ret); } function uplHasSubdirs($dir) { global $client, $cfgClient; $directory = @opendir($cfgClient[$client]["upl"]["path"].$dir); if (!$directory) { return true; } readdir($directory); $ret = false; while(false !== ($dir_entry = readdir($directory))) { if ($dir_entry != "." && $dir_entry != "..") { if (is_dir($cfgClient[$client]["upl"]["path"].$dir.$dir_entry)) { closedir($directory); return true; } } } return ($ret); } /** * uplSyncDirectory ($path) * Sync database contents with directory * * @param string $path Specifies the path to scan */ function uplSyncDirectory ($path) { global $cfgClient, $client, $cfg, $db; if (substr($path,0,5) == "dbfs:") { return uplSyncDirectoryDBFS($path); } $uploads = new UploadCollection; $properties = new PropertyCollection; /* Read all files in a specific directory */ $dir = $cfgClient[$client]['upl']['path'].$path; $olddir = getcwd(); @chdir($dir); $dirhandle = @opendir($dir); /* Whoops, probably failed to open. Return to the caller, but clean up stuff first. */ if (!$dirhandle) { $uploads->select("dirname = '$path' AND idclient = '$client'"); while ($upload = $uploads->next()) { if (!file_exists($cfgClient[$client]["upl"]["path"].$upload->get("dirname").$upload->get("filename"))) { $uploads->delete($upload->get("idupl")); } } $properties->select("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '".$path."%'"); while ($property = $properties->next()) { if (!file_exists($cfgClient[$client]["upl"]["path"].$property->get("itemid"))) { $properties->delete($property->get("idproperty")); } } chdir($olddir); return; } /* Put all the files into the $files array */ while ($file = readdir ($dirhandle)) { if ($file != "." && $file != "..") { if (is_file($file)) { $uploads->sync($path, $file); chmod ($file, 0777); } } } $uploads->select("dirname = '$path' AND idclient = '$client'"); while ($upload = $uploads->next()) { if (!file_exists($cfgClient[$client]["upl"]["path"].$upload->get("dirname").$upload->get("filename"))) { $uploads->delete($upload->get("idupl")); } } $properties->select("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '".$path."%'"); while ($property = $properties->next()) { if (!file_exists($cfgClient[$client]["upl"]["path"].$property->get("itemid"))) { $properties->delete($property->get("idproperty")); } } chdir($olddir); } /** * uplSyncDirectoryDBFS ($path) * Sync database contents with DBFS * * @param string $path Specifies the path to scan */ function uplSyncDirectoryDBFS ($path) { global $cfgClient, $client, $cfg, $db; $uploads = new UploadCollection; $properties = new PropertyCollection; $dbfs = new DBFSCollection; if ($dbfs->dir_exists($path)) { $strippath = $dbfs->strip_path($path); $dbfs->select("dirname = '$strippath'"); while ($file = $dbfs->next()) { if ($file->get("filename") != ".") { $uploads->sync($path."/", $file->get("filename")); chmod ($file, 0777); } } } $uploads->select("dirname = '$path/' AND idclient = '$client'"); while ($upload = $uploads->next()) { if (!$dbfs->file_exists($upload->get("dirname").$upload->get("filename"))) { $uploads->delete($upload->get("idupl")); } } $properties->select("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '".$path."%'"); while ($property = $properties->next()) { if (!$dbfs->file_exists($property->get("itemid"))) { $properties->delete($property->get("idproperty")); } } return; } function uplmkdir($path,$name) { global $cfgClient, $client, $action; if (substr($path,0,5) == "dbfs:") { $path = str_replace("dbfs:","", $path); $fullpath = $path."/".$name."/."; $dbfs = new DBFSCollection; $dbfs->create($fullpath); return; } $name = uplCreateFriendlyName($name); $name = strtr($name, "'", "."); if(file_exists($cfgClient[$client]['upl']['path'].$path.$name)) { $action = "upl_mkdir"; return "0702"; } else { $oldumask = umask(0); @mkdir($cfgClient[$client]['upl']['path'].$path.$name,0775); umask($oldumask); } } function uplRenameDirectory ($oldpath, $newpath, $parent) { global $cfgClient, $client, $cfg, $db; $db2 = new DB_Contenido; rename($cfgClient[$client]['upl']['path'].$parent.$oldpath, $cfgClient[$client]['upl']['path'].$parent.$newpath."/"); /* Fetch all directory strings starting with the old path, and replace them with the new path */ $sql = "SELECT dirname, idupl FROM ".$cfg["tab"]["upl"]." WHERE idclient='$client' AND dirname LIKE '{$parent}{$oldpath}%'"; $db->query($sql); while ($db->next_record()) { $moldpath = $db->f("dirname"); $junk = substr($moldpath, strlen($parent) + strlen($oldpath)); $newpath2 = $parent . $newpath . $junk; $idupl = $db->f("idupl"); $sql = "UPDATE ".$cfg["tab"]["upl"]." SET dirname='$newpath2' WHERE idupl = '$idupl'"; $db2->query($sql); } $sql = "SELECT itemid, idproperty FROM ".$cfg["tab"]["properties"]." WHERE itemid LIKE '{$parent}{$oldpath}%'"; $db->query($sql); while ($db->next_record()) { $moldpath = $db->f("itemid"); $junk = substr($moldpath, strlen($parent) + strlen($oldpath)); $newpath2 = $parent . $newpath . $junk; $idproperty = $db->f("idproperty"); $sql = "UPDATE ".$cfg["tab"]["properties"]." SET itemid = '$newpath2' WHERE idproperty='$idproperty'"; $db2->query($sql); } } function uplRecursiveDirectoryList ($directory, &$rootitem, $level) { $dirhandle = @opendir($directory); if (!$dirhandle) { } else { unset($files); //list the files in the dir while ($file = readdir ($dirhandle)) { if ($file != "." && $file != "..") { if (@chdir($directory.$file."/")) { $files[] = $file; } } } if (is_array($files)) { sort($files); foreach ($files as $key => $file) { /* We aren't using is_dir anymore as that function is buggy */ $olddir = getcwd(); if ($file != "." && $file != "..") { if (@chdir($directory.$file."/")) { unset($item); $item = new TreeItem($file, $directory.$file."/",true); $item->custom["level"] = $level; if ($key == count($files)-1) { $item->custom["lastitem"] = true; } else { $item->custom["lastitem"] = false; } $item->custom["parent"] = $directory; $rootitem->addItem($item); $old = $rootitem; uplRecursiveDirectoryList($directory.$file."/", $item, $level + 1); $rootitem = $old; chdir($olddir); } } } } } @closedir ($dirhandle); } function uplRecursiveDBDirectoryList ($directory, &$rootitem, $level) { $dbfs = new DBFSCollection; $dbfs->select("filename = '.'","dirname", "dirname ASC"); $count = 0; $lastlevel = 0; $item["."] = &$rootitem; while ($dbitem = $dbfs->next()) { $dirname = $dbitem->get("dirname"); $level = substr_count($dirname, "/")+2; $file = basename($dbitem->get("dirname")); $parent = dirname($dbitem->get("dirname")); if ($dirname != "." && $file != ".") { $item[$dirname] = new TreeItem($file, "dbfs:/".$dirname,true); $item[$dirname]->custom["level"] = $level; $item[$dirname]->custom["parent"] = $parent; $item[$dirname]->custom["lastitem"] = true; if ($prevobj[$level]->custom["level"] == $level) { if (is_object($prevobj[$level])) { $prevobj[$level]->custom["lastitem"] = false; } } if ($lastlevel < $level) { } if ($lastlevel > $level) { unset($prevobj[$lastlevel]); $lprevobj->custom["lastitem"] = true; } $prevobj[$level] = &$item[$dirname]; $lprevobj = &$item[$dirname]; $lastlevel = $level; if (is_object($item[$parent])) { $item[$parent]->addItem($item[$dirname]); } $count++; } } } function uplGetThumbnail ($file, $maxsize) { global $client, $cfgClient, $cfg; if ($maxsize == -1) { return uplGetFileIcon ($file); } switch (getFileExtension($file)) { case "png": case "psd": case "gif": case "tiff": case "bmp": case "jpeg": case "jpg": case "bmp": case "iff": case "xbm": case "wbmp": $img = capiImgScale($cfgClient[$client]["upl"]["path"].$file, $maxsize, $maxsize, false, false, 50); if ($img !== false) { return $img; } else { $value = capiImgScale($cfg["path"]["contenido"]."images/unknown.jpg", $maxsize, $maxsize, false, false, 50); if ($value !== false) { return $value; } else { return uplGetFileIcon($file); } } break; default: return uplGetFileIcon ($file); break; } } /** * Returns the icon for a file type * * @param $file Filename to retrieve the extension for * * @return Icon for the file type * */ function uplGetFileIcon ($file) { global $cfg; switch (getFileExtension($file)) { case "sxi": case "sti": case "pps": case "pot": case "kpr": case "ppt": $icon = "ppt.gif"; break; case "doc": case "dot": case "sxw": case "stw": case "sdw": case "kwd": $icon = "word.gif"; break; case "xls": case "sxc": case "stc": case "xlw": case "xlt": case "csv": case "ksp": case "sdc": $icon = "excel.gif"; break; case "txt": case "rtf": $icon = "txt.gif"; break; case "gif": $icon = "gif.gif"; break; case "png": $icon = "png.gif"; break; case "jpeg": case "jpg": $icon = "jpg.gif"; break; case "html": case "htm": $icon = "html.gif"; break; case "lha": case "rar": case "arj": case "bz2": case "bz": case "gz": case "tar": case "tbz2": case "tbz": case "tgz": case "zip": $icon = "zip.gif"; break; case "pdf": $icon = "pdf.gif"; break; default: $icon = "unknown.gif"; } return $cfg['path']['contenido_fullhtml'] . $cfg["path"]["images"]. "filetypes/".$icon; } /** * Returns the description for a file type * * @param $extension Extension to use * * @return Text for the file type * */ function uplGetFileTypeDescription ($extension) { global $cfg; switch ($extension) { /* Presentation files */ case "sxi": return (i18n("OpenOffice.org Presentation")); case "sti": return (i18n("OpenOffice.org Presentation Template")); case "pps": return (i18n("Microsoft PowerPoint Screen Presentation")); case "pot": return (i18n("Microsoft PowerPoint Presentation Template")); case "kpr": return (i18n("KDE KPresenter Document")); case "ppt": return (i18n("Microsoft PowerPoint Presentation Template")); /* Document files */ case "doc": return (i18n("Microsoft Word Document or regular text file")); case "dot": return (i18n("Microsoft Word Template")); case "sxw": return (i18n("OpenOffice.org Text Document")); case "stw": return (i18n("OpenOffice.org Text Document Template")); case "sdw": return (i18n("StarOffice 5.0 Text Document")); case "kwd": return (i18n("KDE KWord Document")); /* Spreadsheet files */ case "xls": return (i18n("Microsoft Excel Worksheet")); case "sxc": return (i18n("OpenOffice.org Table")); case "stc": return (i18n("OpenOffice.org Table Template")); case "xlw": return (i18n("Microsoft Excel File")); case "xlt": return (i18n("Microsoft Excel Template")); case "csv": return (i18n("Comma Seperated Value File")); case "ksp": return (i18n("KDE KSpread Document")); case "sdc": return (i18n("StarOffice 5.0 Table")); /* Text types */ case "txt": return (i18n("Plain Text")); case "rtf": return (i18n("Rich Text Format")); /* Images */ case "gif": return (i18n("GIF Image")); case "png": return (i18n("PNG Image")); case "jpeg": return (i18n("JPEG Image")); case "jpg": return (i18n("JPEG Image")); case "tif": return (i18n("TIFF Image")); case "psd": return (i18n("Adobe Photoshop Image")); /* HTML */ case "html": return (i18n("Hypertext Markup Language Document")); case "htm": return (i18n("Hypertext Markup Language Document")); /* Archives */ case "lha": return (i18n("LHA Archive")); case "rar": return (i18n("RAR Archive")); case "arj": return (i18n("ARJ Archive")); case "bz2": return (i18n("bz2-compressed File")); case "bz": return (i18n("bzip-compressed File")); case "zip": return (i18n("ZIP Archive")); case "tar": return (i18n("TAR Archive")); case "gz": return (i18n("GZ Compressed File")); /* Source files */ case "c": return (i18n("C Program Code")); case "c++": case "cc": case "cpp": return (i18n("C++ Program Code")); case "hpp": case "h": return (i18n("C or C++ Program Header")); case "php": case "php3": case "php4": return (i18n("PHP Program Code")); case "phps": return (i18n("PHP Source File")); case "pdf": return (i18n("Adobe Acrobat Portable Document")); default: return (i18n("Unknown Type")); } } function uplCreateFriendlyName ($filename) { $newfilename = ""; $filename = str_replace(" ", "_", $filename); for ($i=0;$i<strlen($filename);$i++) { $atom = substr($filename, $i,1); if (eregi("[[:alnum:]]", $atom )) { $newfilename .= $atom; } if ($atom == "-" || $atom == "_" || $atom == ".") { $newfilename .= $atom; } } return $newfilename; } function uplSearch ($searchfor) { global $client; $properties = new PropertyCollection; $uploads = new UploadCollection; $mysearch = urlencode($searchfor); /* Search for keywords first, ranking +5 */ $properties->select("idclient='$client' AND itemtype = 'upload' AND type='file' AND name='keywords' AND value LIKE '%$mysearch%'","itemid"); while ($item = $properties->next()) { $items[$item->get("itemid")] += (substr_count(strtolower($item->get("value")), strtolower($searchfor)) * 5); } /* Search for medianame , ranking +4 */ $properties->select("idclient='$client' AND itemtype = 'upload' AND type='file' AND name='medianame' AND value LIKE '%$mysearch%'","itemid"); while ($item = $properties->next()) { $items[$item->get("itemid")] += (substr_count(strtolower($item->get("value")), strtolower($searchfor)) * 4); } /* Search for media notes, ranking +3 */ $properties->select("idclient='$client' AND itemtype = 'upload' AND type='file' AND name='medianotes' AND value LIKE '%$mysearch%'","itemid"); while ($item = $properties->next()) { $items[$item->get("itemid")] += (substr_count(strtolower($item->get("value")), strtolower($searchfor)) * 3); } /* Search for description, ranking +2 */ $uploads->select("idclient='$client' AND description LIKE '%$mysearch%'", "idupl"); while ($item = $uploads->next()) { $items[$item->get("dirname").$item->get("filename")] += (substr_count(strtolower($item->get("description")), strtolower($searchfor)) * 2); } /* Search for file name, ranking +1 */ $uploads->select("idclient='$client' AND filename LIKE '%$mysearch%'", "idupl"); while ($item = $uploads->next()) { $items[$item->get("dirname").$item->get("filename")] += 1; } return ($items); } function uplGetFileExtension ($sFile) { /* Fetch the dot position */ $iDotPosition = strrpos($sFile, "."); $sExtension = substr($sFile, $iDotPosition + 1); if (strpos($sExtension, "/") !== false) { return false; } else { return $sExtension; } } ?>