functions_bmz_io.php
来自「Zen Cart是真正的电子商务艺术」· PHP 代码 · 共 160 行
PHP
160 行
<?php/** * bmz_image_handler.php * general filesystem access handling * * @author Tim Kroeger <tim@breakmyzencart.com> * @author Andreas Gohr <andi@splitbrain.org> * @copyright Copyright 2005-2006 breakmyzencart.com * @copyright Portions Copyright 2005 splitbrain.org * @license http://www.gnu.org/licenses/gpl.txt GNU General Public License V2.0 * @version $Id: functions_bmz_io.php,v 1.2 2006/04/11 22:00:55 tim Exp $ *//** * Tries to lock a file * * Locking uses directories inside $bmzConf['lockdir'] * * It waits maximal 3 seconds for the lock, after this time * the lock is assumed to be stale and the function goes on * * @author Andreas Gohr <andi@splitbrain.org> * @author Tim Kroeger <tim@breakmyzencart.com> */function io_lock($file){ global $bmzConf; // no locking if safemode hack if ($bmzConf['safemodehack']) return; $lockDir = $bmzConf['lockdir'] . '/' . md5($file); @ignore_user_abort(1); $timeStart = time(); do { //waited longer than 3 seconds? -> stale lock if ((time() - $timeStart) > 3) break; $locked = @mkdir($lockDir); } while ($locked === false);}/** * Unlocks a file * * @author Andreas Gohr <andi@splitbrain.org> * @author Tim Kroeger <tim@breakmyzencart.com> */function io_unlock($file){ global $bmzConf; // no locking if safemode hack if($bmzConf['safemodehack']) return; $lockDir = $bmzConf['lockdir'] . '/' . md5($file); @rmdir($lockDir); @ignore_user_abort(0);}/** * Returns the name of a cachefile from given data * * The needed directory is created by this function! * * @author Andreas Gohr <andi@splitbrain.org> * @author Tim Kroeger <tim@breakmyzencart.com> * * @param string $data This data is used to create a unique md5 name * @param string $ext This is appended to the filename if given * @return string The filename of the cachefile */function getCacheName($data, $ext='') { global $bmzConf; $md5 = md5($data); $file = $bmzConf['cachedir'] . '/' . $md5{0} . '/' . $md5.$ext; io_makeFileDir($file); return $file;}/** * Create the directory needed for the given file * * @author Andreas Gohr <andi@splitbrain.org> * @author Tim Kroeger <tim@breakmyzencart.com> */function io_makeFileDir($file){ global $messageStack; global $bmzConf; $dir = dirname($file); $dmask = $bmzConf['dmask']; umask($dmask); if(!is_dir($dir)){ io_mkdir_p($dir) || $messageStack->add("Creating directory $dir failed", "error"); } umask($bmzConf['umask']); }/** * Creates a directory hierachy. * * @link http://www.php.net/manual/en/function.mkdir.php * @author <saint@corenova.com> * @author Andreas Gohr <andi@splitbrain.org> * @author Tim Kroeger <tim@breakmyzencart.com> */function io_mkdir_p($target){ global $bmzConf; if (is_dir($target) || empty($target)) return 1; // best case check first if (@file_exists($target) && !is_dir($target)) return 0; //recursion if (io_mkdir_p(substr($target, 0, strrpos($target, '/')))){ if($bmzConf['safemodehack']){ $dir = preg_replace('/^' . preg_quote(realpath($bmzConf['ftp']['root']), '/') . '/', '', $target); return io_mkdir_ftp($dir); }else{ return @mkdir($target, 0777); // crawl back up & create dir tree } } return 0;}/** * Creates a directory using FTP * * This is used when the safemode workaround is enabled * * @author <andi@splitbrain.org> */function io_mkdir_ftp($dir){ global $messageStack; global $bmzConf; if(!function_exists('ftp_connect')){ $messageStack->add("FTP support not found - safemode workaround not usable", "error"); return false; } $conn = @ftp_connect($bmzConf['ftp']['host'], $bmzConf['ftp']['port'], 10); if(!$conn){ $messageStack->add("FTP connection failed", "error"); return false; } if(!@ftp_login($conn, $bmzConf['ftp']['user'], $bmzConf['ftp']['pass'])){ $messageStack->add("FTP login failed", "error"); return false; } //create directory $ok = @ftp_mkdir($conn, $dir); //set permissions (using the directory umask) @ftp_site($conn, sprintf("CHMOD %04o %s", (0777 - $bmzConf['dmask']), $dir)); @ftp_close($conn); return $ok;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?