⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 installer.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 5 页
字号:
            } else {                // {{{ file with replacements                if (!file_exists($orig_file)) {                    return $this->raiseError("file does not exist",                                             PEAR_INSTALLER_FAILED);                }                if (function_exists('file_get_contents')) {                    $contents = file_get_contents($orig_file);                } else {                    $fp = fopen($orig_file, "r");                    $contents = @fread($fp, filesize($orig_file));                    fclose($fp);                }                if ($contents === false) {                    $contents = '';                }                if (isset($atts['md5sum'])) {                    $md5sum = md5($contents);                }                $subst_from = $subst_to = array();                foreach ($atts['replacements'] as $a) {                    $to = '';                    if ($a['type'] == 'php-const') {                        if (preg_match('/^[a-z0-9_]+$/i', $a['to'])) {                            eval("\$to = $a[to];");                        } else {                            if (!isset($options['soft'])) {                                $this->log(0, "invalid php-const replacement: $a[to]");                            }                            continue;                        }                    } elseif ($a['type'] == 'pear-config') {                        if ($a['to'] == 'master_server') {                            $chan = $this->_registry->getChannel($channel);                            if (!PEAR::isError($chan)) {                                $to = $chan->getServer();                            } else {                                $to = $this->config->get($a['to'], null, $channel);                            }                        } else {                            $to = $this->config->get($a['to'], null, $channel);                        }                        if (is_null($to)) {                            if (!isset($options['soft'])) {                                $this->log(0, "invalid pear-config replacement: $a[to]");                            }                            continue;                        }                    } elseif ($a['type'] == 'package-info') {                        if ($t = $this->pkginfo->packageInfo($a['to'])) {                            $to = $t;                        } else {                            if (!isset($options['soft'])) {                                $this->log(0, "invalid package-info replacement: $a[to]");                            }                            continue;                        }                    }                    if (!is_null($to)) {                        $subst_from[] = $a['from'];                        $subst_to[] = $to;                    }                }                $this->log(3, "doing ".sizeof($subst_from)." substitution(s) for $final_dest_file");                if (sizeof($subst_from)) {                    $contents = str_replace($subst_from, $subst_to, $contents);                }                $wp = @fopen($dest_file, "wb");                if (!is_resource($wp)) {                    return $this->raiseError("failed to create $dest_file: $php_errormsg",                                             PEAR_INSTALLER_FAILED);                }                if (fwrite($wp, $contents) === false) {                    return $this->raiseError("failed writing to $dest_file: $php_errormsg",                                             PEAR_INSTALLER_FAILED);                }                fclose($wp);                // }}}            }            // {{{ check the md5            if (isset($md5sum)) {                if (strtolower($md5sum) == strtolower($atts['md5sum'])) {                    $this->log(2, "md5sum ok: $final_dest_file");                } else {                    if (empty($options['force'])) {                        // delete the file                        @unlink($dest_file);                        if (!isset($options['ignore-errors'])) {                            return $this->raiseError("bad md5sum for file $final_dest_file",                                                 PEAR_INSTALLER_FAILED);                        } else {                            if (!isset($options['soft'])) {                                $this->log(0, "warning : bad md5sum for file $final_dest_file");                            }                        }                    } else {                        if (!isset($options['soft'])) {                            $this->log(0, "warning : bad md5sum for file $final_dest_file");                        }                    }                }            }            // }}}            // {{{ set file permissions            if (!OS_WINDOWS) {                if ($atts['role'] == 'script') {                    $mode = 0777 & ~(int)octdec($this->config->get('umask'));                    $this->log(3, "+ chmod +x $dest_file");                } else {                    $mode = 0666 & ~(int)octdec($this->config->get('umask'));                }                $this->addFileOperation("chmod", array($mode, $dest_file));                if (!@chmod($dest_file, $mode)) {                    if (!isset($options['soft'])) {                        $this->log(0, "failed to change mode of $dest_file");                    }                }            }            // }}}            $this->addFileOperation("rename", array($dest_file, $final_dest_file,                $atts['role'] == 'ext'));        }        // Store the full path where the file was installed for easy unistall        $this->addFileOperation("installed_as", array($file, $installed_as,                                $save_destdir, dirname(substr($installedas_dest_file, strlen($save_destdir)))));        //$this->log(2, "installed: $dest_file");        return PEAR_INSTALLER_OK;    }    // }}}    // {{{ _installFile2()    /**     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2     * @param string filename     * @param array attributes from <file> tag in package.xml     * @param string path to install the file in     * @param array options from command-line     * @access private     */    function _installFile2(&$pkg, $file, $atts, $tmp_path, $options)    {        if (!isset($this->_registry)) {            $this->_registry = &$this->config->getRegistry();        }        $channel = $pkg->getChannel();        // {{{ assemble the destination paths        if (!in_array($atts['attribs']['role'],              PEAR_Installer_Role::getValidRoles($pkg->getPackageType()))) {            return $this->raiseError('Invalid role `' . $atts['attribs']['role'] .                    "' for file $file");        }        $role = &PEAR_Installer_Role::factory($pkg, $atts['attribs']['role'], $this->config);        $err = $role->setup($this, $pkg, $atts['attribs'], $file);        if (PEAR::isError($err)) {            return $err;        }        if (!$role->isInstallable()) {            return;        }        $info = $role->processInstallation($pkg, $atts['attribs'], $file, $tmp_path);        if (PEAR::isError($info)) {            return $info;        } else {            list($save_destdir, $dest_dir, $dest_file, $orig_file) = $info;        }        $final_dest_file = $installed_as = $dest_file;        if (isset($this->_options['packagingroot'])) {            $final_dest_file = $this->_prependPath($final_dest_file,                $this->_options['packagingroot']);        }        $dest_dir = dirname($final_dest_file);        $dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);        // }}}        if (empty($this->_options['register-only'])) {            if (!@is_dir($dest_dir)) {                if (!$this->mkDirHier($dest_dir)) {                    return $this->raiseError("failed to mkdir $dest_dir",                                             PEAR_INSTALLER_FAILED);                }                $this->log(3, "+ mkdir $dest_dir");            }        }        $attribs = $atts['attribs'];        unset($atts['attribs']);        // pretty much nothing happens if we are only registering the install        if (empty($this->_options['register-only'])) {            if (!count($atts)) { // no tasks                if (!file_exists($orig_file)) {                    return $this->raiseError("file $orig_file does not exist",                                             PEAR_INSTALLER_FAILED);                }                if (!@copy($orig_file, $dest_file)) {                    return $this->raiseError("failed to write $dest_file",                                             PEAR_INSTALLER_FAILED);                }                $this->log(3, "+ cp $orig_file $dest_file");                if (isset($attribs['md5sum'])) {                    $md5sum = md5_file($dest_file);                }            } else { // file with tasks                if (!file_exists($orig_file)) {                    return $this->raiseError("file $orig_file does not exist",                                             PEAR_INSTALLER_FAILED);                }                if (function_exists('file_get_contents')) {                    $contents = file_get_contents($orig_file);                } else {                    $fp = fopen($orig_file, "r");                    $contents = @fread($fp, filesize($orig_file)); // filesize can be 0                    fclose($fp);                }                if ($contents === false) {                    $contents = '';                }                if (isset($attribs['md5sum'])) {                    $md5sum = md5($contents);                }                foreach ($atts as $tag => $raw) {                    $tag = str_replace($pkg->getTasksNs() . ':', '', $tag);                    $task = "PEAR_Task_$tag";                    $task = &new $task($this->config, $this, PEAR_TASK_INSTALL);                    if (!$task->isScript()) { // scripts are only handled after installation                        $task->init($raw, $attribs, $pkg->getLastInstalledVersion());                        $res = $task->startSession($pkg, $contents, $final_dest_file);                        if ($res === false) {                            continue; // skip this file                        }                        if (PEAR::isError($res)) {                            return $res;                        }                        $contents = $res; // save changes                    }                    $wp = @fopen($dest_file, "wb");                    if (!is_resource($wp)) {                        return $this->raiseError("failed to create $dest_file: $php_errormsg",                                                 PEAR_INSTALLER_FAILED);                    }                    if (fwrite($wp, $contents) === false) {                        return $this->raiseError("failed writing to $dest_file: $php_errormsg",                                                 PEAR_INSTALLER_FAILED);                    }                    fclose($wp);                }            }            // {{{ check the md5            if (isset($md5sum)) {                if (strtolower($md5sum) == strtolower($attribs['md5sum'])) {                    $this->log(2, "md5sum ok: $final_dest_file");                } else {                    if (empty($options['force'])) {                        // delete the file                        @unlink($dest_file);                        if (!isset($options['ignore-errors'])) {                            return $this->raiseError("bad md5sum for file $final_dest_file",                                                     PEAR_INSTALLER_FAILED);                        } else {                            if (!isset($options['soft'])) {                                $this->log(0, "warning : bad md5sum for file $final_dest_file");                            }                        }                    } else {                        if (!isset($options['soft'])) {                            $this->log(0, "warning : bad md5sum for file $final_dest_file");                        }                    }                }            }            // }}}            // {{{ set file permissions            if (!OS_WINDOWS) {                if ($role->isExecutable()) {                    $mode = 0777 & ~(int)octdec($this->config->get('umask'));                    $this->log(3, "+ chmod +x $dest_file");                } else {                    $mode = 0666 & ~(int)octdec($this->config->get('umask'));                }                $this->addFileOperation("chmod", array($mode, $dest_file));                if (!@chmod($dest_file, $mode)) {                    if (!isset($options['soft'])) {                        $this->log(0, "failed to change mode of $dest_file");                    }                }            }            // }}}            $this->addFileOperation("rename", array($dest_file, $final_dest_file, $role->isExtension()));        }        // Store the full path where the file was installed for easy uninstall        $this->addFileOperation("installed_as", array($file, $installed_as,                            $save_destdir, dirname(substr($dest_file, strlen($save_destdir)))));        //$this->log(2, "installed: $dest_file");        return PEAR_INSTALLER_OK;    }    // }}}    // {{{ addFileOperation()    /**     * Add a file operation to the current file transaction.     *     * @see startFileTransaction()     * @param string $type This can be one of:     *    - rename:  rename a file ($data has 3 values)     *    - backup:  backup an existing file ($data has 1 value)     *    - removebackup:  clean up backups created during install ($data has 1 value)     *    - chmod:   change permissions on a file ($data has 2 values)     *    - delete:  delete a file ($data has 1 value)     *    - rmdir:   delete a directory if empty ($data has 1 value)     *    - installed_as: mark a file as installed ($data has 4 values).     * @param array $data For all file operations, this array must contain the     *    full path to the file or directory that is being operated on.  For     *    the rename command, the first parameter must be the file to rename,     *    the second its new name, the third whether this is a PHP extension.     *     *    The installed_as operation contains 4 elements in this order:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -