* convert to unix format.

This commit is contained in:
wangchunsheng
2013-01-18 02:30:05 +00:00
parent 048dd586ba
commit c6066a60e1
20 changed files with 3905 additions and 3905 deletions

View File

@@ -1,45 +1,45 @@
@ECHO OFF
:READ
:: SET /P prompts for input and sets the variable
:: to whatever the user types
SET path=
SET suffix=\php.exe
SET currentFile=%0
SET /P path=Input the path PHP:
:<><C8B7>·<EFBFBD><C2B7><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>\php.exe
IF EXIST %path%%suffix% GOTO ONLYDIR
IF EXIST %path% GOTO FULLPATH
ECHO "%path%" is not valid. Please try again.
ECHO.
GOTO READ
:FULLPATH
:<><C2B7>ȥ<EFBFBD><C8A5>\php.exe
if /I %path:~-8% == %suffix% set path=%path:~0,-8%
:ONLYDIR
::<3A><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
set path=%path%%suffix%
set TMPFILE=%random%.tmp
set currentFile=%currentFile:~-11%
for /r %~dp0 %%i in (*.bat) do (
if exist %TMPFILE% (del /f/q %TMPFILE%)
::<3A>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>ļ<EFBFBD>
if not %~dp0%currentFile%==%%i (
echo Change %%i
for /f "tokens=1,2* delims= " %%j in (%%i) do (
::<3A>޸<EFBFBD><DEB8>ļ<EFBFBD><C4BC>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>
if exist %%k (if "%%l"=="" (echo %path% %%k>>%TMPFILE%) else (echo %path% %%k %%l>>%TMPFILE%)) else (if "%%k"=="" (echo %%j>>%TMPFILE%) else if "%%l"=="" (echo %%j %%k>>%TMPFILE%) else (echo %%j %%k %%l>>%TMPFILE%))
)
move /y %TMPFILE% "%%i"
)
)
cd ..\
echo Change ztcli.bat
::<3A>޸<EFBFBD>ztcli.bat
if exist %TMPFILE% (del /f/q %TMPFILE%)
for /f "tokens=1,2* delims= " %%j in (ztcli.bat) do (
::<3A>޸<EFBFBD><DEB8>ļ<EFBFBD><C4BC>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>
if exist %%k (if "%%l"=="" (echo %path% %%k>>%TMPFILE%) else (echo %path% %%k %%l>>%TMPFILE%)) else (if "%%k"=="" (echo %%j>>%TMPFILE%) else if "%%l"=="" (echo %%j %%k>>%TMPFILE%) else (echo %%j %%k %%l>>%TMPFILE%))
)
move /y %TMPFILE% "ztcli.bat"
echo Success!
pause
@ECHO OFF
:READ
:: SET /P prompts for input and sets the variable
:: to whatever the user types
SET path=
SET suffix=\php.exe
SET currentFile=%0
SET /P path=Input the path PHP:
:<><C8B7>·<EFBFBD><C2B7><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>\php.exe
IF EXIST %path%%suffix% GOTO ONLYDIR
IF EXIST %path% GOTO FULLPATH
ECHO "%path%" is not valid. Please try again.
ECHO.
GOTO READ
:FULLPATH
:<><C2B7>ȥ<EFBFBD><C8A5>\php.exe
if /I %path:~-8% == %suffix% set path=%path:~0,-8%
:ONLYDIR
::<3A><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
set path=%path%%suffix%
set TMPFILE=%random%.tmp
set currentFile=%currentFile:~-11%
for /r %~dp0 %%i in (*.bat) do (
if exist %TMPFILE% (del /f/q %TMPFILE%)
::<3A>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>ļ<EFBFBD>
if not %~dp0%currentFile%==%%i (
echo Change %%i
for /f "tokens=1,2* delims= " %%j in (%%i) do (
::<3A>޸<EFBFBD><DEB8>ļ<EFBFBD><C4BC>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>
if exist %%k (if "%%l"=="" (echo %path% %%k>>%TMPFILE%) else (echo %path% %%k %%l>>%TMPFILE%)) else (if "%%k"=="" (echo %%j>>%TMPFILE%) else if "%%l"=="" (echo %%j %%k>>%TMPFILE%) else (echo %%j %%k %%l>>%TMPFILE%))
)
move /y %TMPFILE% "%%i"
)
)
cd ..\
echo Change ztcli.bat
::<3A>޸<EFBFBD>ztcli.bat
if exist %TMPFILE% (del /f/q %TMPFILE%)
for /f "tokens=1,2* delims= " %%j in (ztcli.bat) do (
::<3A>޸<EFBFBD><DEB8>ļ<EFBFBD><C4BC>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>
if exist %%k (if "%%l"=="" (echo %path% %%k>>%TMPFILE%) else (echo %path% %%k %%l>>%TMPFILE%)) else (if "%%k"=="" (echo %%j>>%TMPFILE%) else if "%%l"=="" (echo %%j %%k>>%TMPFILE%) else (echo %%j %%k %%l>>%TMPFILE%))
)
move /y %TMPFILE% "ztcli.bat"
echo Success!
pause

View File

@@ -1,60 +1,60 @@
<?php
/**
* The control file of common module of ZenTaoPMS.
*
* @copyright Copyright 2009-2013 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
* @author Chen congzhi <congzhi@cnezsoft.com>
* @package common
* @version $Id$
* @link http://www.zentao.net
*/
include '../../config/config.php';
$modules = array();
$moduleRoot = realpath('../../module/') . '/';
if(is_dir($moduleRoot))
{
if($dh = opendir($moduleRoot))
{
while($module = readdir($dh))
{
if(strpos(basename($module), '.') === false) $modules[] = $module;
}
closedir($dh);
}
}
else
{
die("The module you input does not exist. \n");
}
foreach($modules as $module)
{
/* 设定各个目录。*/
$extRoot = $moduleRoot . DIRECTORY_SEPARATOR. $module . DIRECTORY_SEPARATOR . 'ext';
$extControl = $extRoot . DIRECTORY_SEPARATOR . 'control';
$extModel = $extRoot . DIRECTORY_SEPARATOR . 'model';
$extView = $extRoot . DIRECTORY_SEPARATOR . 'view';
$extConfig = $extRoot . DIRECTORY_SEPARATOR . 'config';
$extLang = $extRoot . DIRECTORY_SEPARATOR . 'lang' . DIRECTORY_SEPARATOR;
/* 建立各个扩展目录 */
if(!file_exists($extRoot)) mkdir($extRoot, 0777);
if(!file_exists($extControl)) mkdir($extControl, 0777);
if(!file_exists($extModel)) mkdir($extModel, 0777);
if(!file_exists($extView)) mkdir($extView, 0777);
if(!file_exists($extConfig)) mkdir($extConfig, 0777);
if(!file_exists($extLang)) mkdir($extLang, 0777);
/* 创建语言目录。*/
$langs = array_keys($config->langs);
foreach($langs as $lang)
{
$langPath = $extLang . $lang;
if(!file_exists($langPath)) mkdir($langPath, 0777);
}
echo "init $module ... \n";
}
<?php
/**
* The control file of common module of ZenTaoPMS.
*
* @copyright Copyright 2009-2013 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
* @author Chen congzhi <congzhi@cnezsoft.com>
* @package common
* @version $Id$
* @link http://www.zentao.net
*/
include '../../config/config.php';
$modules = array();
$moduleRoot = realpath('../../module/') . '/';
if(is_dir($moduleRoot))
{
if($dh = opendir($moduleRoot))
{
while($module = readdir($dh))
{
if(strpos(basename($module), '.') === false) $modules[] = $module;
}
closedir($dh);
}
}
else
{
die("The module you input does not exist. \n");
}
foreach($modules as $module)
{
/* 设定各个目录。*/
$extRoot = $moduleRoot . DIRECTORY_SEPARATOR. $module . DIRECTORY_SEPARATOR . 'ext';
$extControl = $extRoot . DIRECTORY_SEPARATOR . 'control';
$extModel = $extRoot . DIRECTORY_SEPARATOR . 'model';
$extView = $extRoot . DIRECTORY_SEPARATOR . 'view';
$extConfig = $extRoot . DIRECTORY_SEPARATOR . 'config';
$extLang = $extRoot . DIRECTORY_SEPARATOR . 'lang' . DIRECTORY_SEPARATOR;
/* 建立各个扩展目录 */
if(!file_exists($extRoot)) mkdir($extRoot, 0777);
if(!file_exists($extControl)) mkdir($extControl, 0777);
if(!file_exists($extModel)) mkdir($extModel, 0777);
if(!file_exists($extView)) mkdir($extView, 0777);
if(!file_exists($extConfig)) mkdir($extConfig, 0777);
if(!file_exists($extLang)) mkdir($extLang, 0777);
/* 创建语言目录。*/
$langs = array_keys($config->langs);
foreach($langs as $lang)
{
$langPath = $extLang . $lang;
if(!file_exists($langPath)) mkdir($langPath, 0777);
}
echo "init $module ... \n";
}

124
bin/ztcli
View File

@@ -1,62 +1,62 @@
#!/usr/bin/env php
<?php
/**
* 禅道系统命令行访问入口。使用方法http://www.zentao.net/help-read-78899.html
* The cli router file of zentaopms.
*
* @copyright Copyright 2009-2013 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package bin
* @version $Id$
* @link http://www.ZenTaoPMS.com
*/
error_reporting(E_ALL ^ E_NOTICE);
define('IN_SHELL', true);
/* Judge the args. */
if($argc != 2) die('Usage: ' . basename(__FILE__) . " <request>\n");
/* Parse the request into params. */
$request = parse_url(trim($argv[1]));
$_SERVER['HTTP_HOST'] = $request['host'];
/* Load the framework. */
chdir(dirname(dirname(__FILE__)));
include './framework/router.class.php';
include './framework/control.class.php';
include './framework/model.class.php';
include './framework/helper.class.php';
include './config/config.php';
if($config->requestType == 'PATH_INFO')
{
$path = pathinfo($request['path']);
if(strpos($path['basename'], $config->requestFix))
{
$_SERVER['PATH_INFO'] = $path['basename'];
}
else
{
if(is_dir('./module/' . $path['basename']))
{
$_SERVER['PATH_INFO'] = $path['basename'];
}
else
{
$_SERVER['PATH_INFO'] = '';
}
}
}
else
{
parse_str($request['query'], $_GET);
$_SERVER['SCRIPT_NAME'] = $_SERVER['HTTP_HOST'] . 'index.php';
$_SERVER['REQUEST_URI'] = isset($request['query']) ? $request['query'] : '';
}
/* Instance the app and run it. */
$app = router::createApp('pms', dirname(dirname(__FILE__)));
$common = $app->loadCommon();
$app->parseRequest();
$app->loadModule();
#!/usr/bin/env php
<?php
/**
* 禅道系统命令行访问入口。使用方法http://www.zentao.net/help-read-78899.html
* The cli router file of zentaopms.
*
* @copyright Copyright 2009-2013 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package bin
* @version $Id$
* @link http://www.ZenTaoPMS.com
*/
error_reporting(E_ALL ^ E_NOTICE);
define('IN_SHELL', true);
/* Judge the args. */
if($argc != 2) die('Usage: ' . basename(__FILE__) . " <request>\n");
/* Parse the request into params. */
$request = parse_url(trim($argv[1]));
$_SERVER['HTTP_HOST'] = $request['host'];
/* Load the framework. */
chdir(dirname(dirname(__FILE__)));
include './framework/router.class.php';
include './framework/control.class.php';
include './framework/model.class.php';
include './framework/helper.class.php';
include './config/config.php';
if($config->requestType == 'PATH_INFO')
{
$path = pathinfo($request['path']);
if(strpos($path['basename'], $config->requestFix))
{
$_SERVER['PATH_INFO'] = $path['basename'];
}
else
{
if(is_dir('./module/' . $path['basename']))
{
$_SERVER['PATH_INFO'] = $path['basename'];
}
else
{
$_SERVER['PATH_INFO'] = '';
}
}
}
else
{
parse_str($request['query'], $_GET);
$_SERVER['SCRIPT_NAME'] = $_SERVER['HTTP_HOST'] . 'index.php';
$_SERVER['REQUEST_URI'] = isset($request['query']) ? $request['query'] : '';
}
/* Instance the app and run it. */
$app = router::createApp('pms', dirname(dirname(__FILE__)));
$common = $app->loadCommon();
$app->parseRequest();
$app->loadModule();

View File

@@ -1,31 +1,31 @@
<?php
$config->installed = false;
$config->debug = false;
$config->requestType = 'PATH_INFO';
$config->db->host = SAE_MYSQL_HOST_M;
$config->db->slaveHost = SAE_MYSQL_HOST_S;
$config->db->port = SAE_MYSQL_PORT;
$config->db->name = SAE_MYSQL_DB;
$config->db->user = SAE_MYSQL_USER;
$config->db->password = SAE_MYSQL_PASS;
$config->db->prefix = 'zt_';
$config->db->checkCentOS = false;
$config->slaveDB->host = SAE_MYSQL_HOST_S;
$config->slaveDB->port = SAE_MYSQL_PORT;
$config->slaveDB->name = SAE_MYSQL_DB;
$config->slaveDB->user = SAE_MYSQL_USER;
$config->slaveDB->password = SAE_MYSQL_PASS;
$config->slaveDB->checkCentOS = false;
$config->webRoot = '/';
$config->default->domain = $_SERVER['HTTP_HOST'];
$config->default->lang = 'zh-cn';
$config->sae->storage->domain = 'zentao';
$saeDB = new saemysql();
$saeSQL = "SELECT COUNT(`id`) FROM `" . $config->db->prefix . "config` WHERE 1 LIMIT 0,10";
if($saeDB->getData($saeSQL)) $config->installed = true;
$saeDB->closeDb();
<?php
$config->installed = false;
$config->debug = false;
$config->requestType = 'PATH_INFO';
$config->db->host = SAE_MYSQL_HOST_M;
$config->db->slaveHost = SAE_MYSQL_HOST_S;
$config->db->port = SAE_MYSQL_PORT;
$config->db->name = SAE_MYSQL_DB;
$config->db->user = SAE_MYSQL_USER;
$config->db->password = SAE_MYSQL_PASS;
$config->db->prefix = 'zt_';
$config->db->checkCentOS = false;
$config->slaveDB->host = SAE_MYSQL_HOST_S;
$config->slaveDB->port = SAE_MYSQL_PORT;
$config->slaveDB->name = SAE_MYSQL_DB;
$config->slaveDB->user = SAE_MYSQL_USER;
$config->slaveDB->password = SAE_MYSQL_PASS;
$config->slaveDB->checkCentOS = false;
$config->webRoot = '/';
$config->default->domain = $_SERVER['HTTP_HOST'];
$config->default->lang = 'zh-cn';
$config->sae->storage->domain = 'zentao';
$saeDB = new saemysql();
$saeSQL = "SELECT COUNT(`id`) FROM `" . $config->db->prefix . "config` WHERE 1 LIMIT 0,10";
if($saeDB->getData($saeSQL)) $config->installed = true;
$saeDB->closeDb();

View File

@@ -1,28 +1,28 @@
<?php
$appRoot = dirname(dirname(dirname(__FILE__))) . '/' ;
$sourceHtaccessFile = $appRoot . 'htaccess';
$targetHtaccessFile = $appRoot . '.htaccess';
if(file_exists($sourceHtaccessFile))
{
$targetHtaccessCode = str_replace('index.php', $config->webRoot . 'index.php', file_get_contents($sourceHtaccessFile));
file_put_contents($targetHtaccessFile, $targetHtaccessCode);
}
$tmpRoot = $appRoot . '/tmp/';
if(!is_dir($tmpRoot))
{
mkdir($tmpRoot, 0777);
mkdir($tmpRoot . 'cache', 0777);
mkdir($tmpRoot . 'extension', 0777);
mkdir($tmpRoot . 'log', 0777);
mkdir($tmpRoot . 'model', 0777);
mkdir($tmpRoot . 'svn', 0777);
}
$dataRoot = $appRoot . 'data/';
if(!is_dir($dataRoot))
{
mkdir($dataRoot, 0777);
mkdir($dataRoot . 'upload', 0777);
}
<?php
$appRoot = dirname(dirname(dirname(__FILE__))) . '/' ;
$sourceHtaccessFile = $appRoot . 'htaccess';
$targetHtaccessFile = $appRoot . '.htaccess';
if(file_exists($sourceHtaccessFile))
{
$targetHtaccessCode = str_replace('index.php', $config->webRoot . 'index.php', file_get_contents($sourceHtaccessFile));
file_put_contents($targetHtaccessFile, $targetHtaccessCode);
}
$tmpRoot = $appRoot . '/tmp/';
if(!is_dir($tmpRoot))
{
mkdir($tmpRoot, 0777);
mkdir($tmpRoot . 'cache', 0777);
mkdir($tmpRoot . 'extension', 0777);
mkdir($tmpRoot . 'log', 0777);
mkdir($tmpRoot . 'model', 0777);
mkdir($tmpRoot . 'svn', 0777);
}
$dataRoot = $appRoot . 'data/';
if(!is_dir($dataRoot))
{
mkdir($dataRoot, 0777);
mkdir($dataRoot . 'upload', 0777);
}

View File

@@ -1,47 +1,47 @@
<appwizard>
<introduction>
<name>禅道项目管理软件SAE版本</name>
<author>青岛易软天创网络科技有限公司</author>
<icon>default_app_icon</icon>
<homepage>http://www.zentao.net/</homepage>
<description>
<![CDATA[
<p>禅道项目管理软件(ZenTaoPMS)是一款国产的基于LGPL协议开源免费的项目管理软件它集产品管理、项目管理、测试管理于一体同时还包含了事务管理、组织管理等诸多功能是中小型企业项目管理的首选。禅道项目管理软件使用PHP + MySQL开发基于自主的PHP开发框架──ZenTaoPHP而成。第三方开发者或者企业可以非常方便的开发插件或者进行定制。</p>
]]>
</description>
</introduction>
<platform>
<services>
<service name="zentao" params="禅道数据存储">Storage</service>
<service size="12M">Memcache</service>
<service>Mysql</service>
</services>
<appconfig>
<tpl>
<![CDATA[
name: <<appname>>
version: <<version>>
cron:
- description: cron
url: project-computeburn-admin.html
schedule: every day of month 00:00
timezone: Beijing
handle:
- rewrite: if(!is_dir() && !is_file()) goto "index.php/%{REQUEST_URI}"
- compress: if(out_header["Content-Type"] ~ "text") compress
- compress: if(out_header["Content-Type"] ~ "javascript") compress
- expire: if(path ~ "\.js$") time 360000
- expire: if(path ~ "\.css$") time 360000
- expire: if(path ~ "\.gif$") time 360000
- expire: if(path ~ "\.png$") time 360000
- expire: if(path ~ "\.ico$") time 360000
- expire: if(path ~ "\.jpg$") time 360000
]]>
</tpl>
</appconfig>
</platform>
<code>
<initScript>index.php</initScript>
</code>
</appwizard>
<appwizard>
<introduction>
<name>禅道项目管理软件SAE版本</name>
<author>青岛易软天创网络科技有限公司</author>
<icon>default_app_icon</icon>
<homepage>http://www.zentao.net/</homepage>
<description>
<![CDATA[
<p>禅道项目管理软件(ZenTaoPMS)是一款国产的基于LGPL协议开源免费的项目管理软件它集产品管理、项目管理、测试管理于一体同时还包含了事务管理、组织管理等诸多功能是中小型企业项目管理的首选。禅道项目管理软件使用PHP + MySQL开发基于自主的PHP开发框架──ZenTaoPHP而成。第三方开发者或者企业可以非常方便的开发插件或者进行定制。</p>
]]>
</description>
</introduction>
<platform>
<services>
<service name="zentao" params="禅道数据存储">Storage</service>
<service size="12M">Memcache</service>
<service>Mysql</service>
</services>
<appconfig>
<tpl>
<![CDATA[
name: <<appname>>
version: <<version>>
cron:
- description: cron
url: project-computeburn-admin.html
schedule: every day of month 00:00
timezone: Beijing
handle:
- rewrite: if(!is_dir() && !is_file()) goto "index.php/%{REQUEST_URI}"
- compress: if(out_header["Content-Type"] ~ "text") compress
- compress: if(out_header["Content-Type"] ~ "javascript") compress
- expire: if(path ~ "\.js$") time 360000
- expire: if(path ~ "\.css$") time 360000
- expire: if(path ~ "\.gif$") time 360000
- expire: if(path ~ "\.png$") time 360000
- expire: if(path ~ "\.ico$") time 360000
- expire: if(path ~ "\.jpg$") time 360000
]]>
</tpl>
</appconfig>
</platform>
<code>
<initScript>index.php</initScript>
</code>
</appwizard>

View File

@@ -1,14 +1,14 @@
Ϊ<EFBFBD>˱<EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD>ϸ<EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1. <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>벿<EFBFBD><EBB2BF><EFBFBD><EFBFBD>ijһ<C4B3><D2BB><EFBFBD>̷<EFBFBD><CCB7>ĸ<EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><E6A3AC><EFBFBD><EFBFBD>c:\xampp<70><70><EFBFBD><EFBFBD>d:\xampp<70><70><EFBFBD>ǿ<EFBFBD><C7BF>Եġ<D4B5>
2. <20><>Ҫ<EFBFBD>Ķ<EFBFBD>xampp<70><70>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
3. zentaoamp-control-cn.exe<78>Ǹ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壬zentaoamp-control-en.exe<78><65>Ӣ<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5A1A3><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣapache, mysql<71><6C>
4. <20><><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>apache<68><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>Ƿ<EFBFBD><C7B7><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڳ<CBBF>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>88<38>˿ڡ<CBBF><DAA1><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>ϲ<EFBFBD><CFB2>Ƕ˿ڳ<CBBF>ͻ<EFBFBD><CDBB><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>װvc<76><63><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
32λϵͳ<CFB5><CDB3><EFBFBD>أ<EFBFBD>http://www.microsoft.com/downloads/details.aspx?FamilyID=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF
64λϵͳ<CFB5><CDB3><EFBFBD>أ<EFBFBD>http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=15336
5. <20><><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>mysql<71><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>Ƿ<EFBFBD><C7B7><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3308<30>˿ڡ<CBBF>
6. <20><><EFBFBD><EFBFBD>ϵͳĬ<CDB3>ϵĹ<CFB5><C4B9><EFBFBD>Ա<EFBFBD>ʺ<EFBFBD><CABA><EFBFBD>admin<69><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>123456<35><36>
7. <20><><EFBFBD>ݿ<EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>root<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ա<EFBFBD>
8. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBFAA><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5A3AC>mysql<71><6C>apache<68><65>װΪ<D7B0><CEAA><EFBFBD>񣬷<EFBFBD><F1A3ACB7><EFBFBD><EFBFBD><EFBFBD>Ϊapachezt, mysqlzt<7A><74>
<EFBFBD><EFBFBD>ϸ<EFBFBD>Ľ<EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>http://www.zentao.net/help-read-79597.html
Ϊ<EFBFBD>˱<EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD>ϸ<EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1. <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>벿<EFBFBD><EBB2BF><EFBFBD><EFBFBD>ijһ<C4B3><D2BB><EFBFBD>̷<EFBFBD><CCB7>ĸ<EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><E6A3AC><EFBFBD><EFBFBD>c:\xampp<70><70><EFBFBD><EFBFBD>d:\xampp<70><70><EFBFBD>ǿ<EFBFBD><C7BF>Եġ<D4B5>
2. <20><>Ҫ<EFBFBD>Ķ<EFBFBD>xampp<70><70>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
3. zentaoamp-control-cn.exe<78>Ǹ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壬zentaoamp-control-en.exe<78><65>Ӣ<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5A1A3><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣapache, mysql<71><6C>
4. <20><><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>apache<68><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>Ƿ<EFBFBD><C7B7><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڳ<CBBF>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>88<38>˿ڡ<CBBF><DAA1><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>ϲ<EFBFBD><CFB2>Ƕ˿ڳ<CBBF>ͻ<EFBFBD><CDBB><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>װvc<76><63><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
32λϵͳ<CFB5><CDB3><EFBFBD>أ<EFBFBD>http://www.microsoft.com/downloads/details.aspx?FamilyID=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF
64λϵͳ<CFB5><CDB3><EFBFBD>أ<EFBFBD>http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=15336
5. <20><><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>mysql<71><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>Ƿ<EFBFBD><C7B7><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3308<30>˿ڡ<CBBF>
6. <20><><EFBFBD><EFBFBD>ϵͳĬ<CDB3>ϵĹ<CFB5><C4B9><EFBFBD>Ա<EFBFBD>ʺ<EFBFBD><CABA><EFBFBD>admin<69><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>123456<35><36>
7. <20><><EFBFBD>ݿ<EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>root<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ա<EFBFBD>
8. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBFAA><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5A3AC>mysql<71><6C>apache<68><65>װΪ<D7B0><CEAA><EFBFBD>񣬷<EFBFBD><F1A3ACB7><EFBFBD><EFBFBD><EFBFBD>Ϊapachezt, mysqlzt<7A><74>
<EFBFBD><EFBFBD>ϸ<EFBFBD>Ľ<EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>http://www.zentao.net/help-read-79597.html

View File

@@ -1,55 +1,55 @@
<IfModule env_module>
SetEnv MIBDIRS "/xampp/php/extras/mibs"
SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
SetEnv OPENSSL_CONF "/xampp/apache/bin/openssl.cnf"
SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php"
SetEnv PHPRC "\\xampp\\php"
SetEnv TMP "\\xampp\\tmp"
</IfModule>
LoadFile "/xampp/php/php5ts.dll"
LoadModule php5_module "/xampp/php/php5apache2_4.dll"
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
<IfModule php5_module>
PHPINIDir "/xampp/php"
</IfModule>
<IfModule mime_module>
AddType text/html .php .phps
</IfModule>
<IfModule alias_module>
Alias /phpmyadmin "/xampp/admin/phpmyadmin/"
<Directory "/xampp/admin/phpmyadmin">
AllowOverride AuthConfig
Require all granted
</Directory>
Alias /zentao "/xampp/zentao/www/"
<Directory "/xampp/zentao/www">
Order deny,allow
Allow from all
AllowOverride All
Require all granted
</Directory>
</IfModule>
<LocationMatch "^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</LocationMatch>
# setting of gzip.
DeflateCompressionLevel 9
AddOutputFilterByType DEFLATE text/html text/css application/javascript
# turn off etag.
FileEtag none
<IfModule env_module>
SetEnv MIBDIRS "/xampp/php/extras/mibs"
SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
SetEnv OPENSSL_CONF "/xampp/apache/bin/openssl.cnf"
SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php"
SetEnv PHPRC "\\xampp\\php"
SetEnv TMP "\\xampp\\tmp"
</IfModule>
LoadFile "/xampp/php/php5ts.dll"
LoadModule php5_module "/xampp/php/php5apache2_4.dll"
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
<IfModule php5_module>
PHPINIDir "/xampp/php"
</IfModule>
<IfModule mime_module>
AddType text/html .php .phps
</IfModule>
<IfModule alias_module>
Alias /phpmyadmin "/xampp/admin/phpmyadmin/"
<Directory "/xampp/admin/phpmyadmin">
AllowOverride AuthConfig
Require all granted
</Directory>
Alias /zentao "/xampp/zentao/www/"
<Directory "/xampp/zentao/www">
Order deny,allow
Allow from all
AllowOverride All
Require all granted
</Directory>
</IfModule>
<LocationMatch "^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</LocationMatch>
# setting of gzip.
DeflateCompressionLevel 9
AddOutputFilterByType DEFLATE text/html text/css application/javascript
# turn off etag.
FileEtag none

View File

@@ -1,144 +1,144 @@
<?php
/**
* The config file of ZenTaoPMS.
*
* Don't modify this file directly, copy the item to my.php and change it.
*
* @copyright Copyright 2009-2013 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package config
* @version $Id$
* @link http://www.zentao.net
*/
/* Basic settings. */
$config = new config();
$config->version = '4.0.beta2'; // The version of zentaopms. Don't change it.
$config->encoding = 'UTF-8'; // The encoding of zentaopms.
$config->cookieLife = time() + 2592000; // The cookie life time.
$config->timezone = 'Asia/Shanghai'; // The time zone setting, for more see http://www.php.net/manual/en/timezones.php
$config->webRoot = ''; // The root path of the pms.
/* The request settings. */
$config->requestType = 'PATH_INFO'; // The request type: PATH_INFO|GET, if PATH_INFO, must use url rewrite.
$config->pathType = 'clean'; // If the request type is PATH_INFO, the path type.
$config->requestFix = '-'; // The divider in the url when PATH_INFO.
$config->moduleVar = 'm'; // requestType=GET: the module var name.
$config->methodVar = 'f'; // requestType=GET: the method var name.
$config->viewVar = 't'; // requestType=GET: the view var name.
$config->sessionVar = 'sid'; // requestType=GET: the session var name.
/* Supported views. */
$config->views = ',html,json,';
/* Set the wide window size. */
$config->wideSize = 1400;
/* Supported languages. */
$config->langs['zh-cn'] = '中文简体';
$config->langs['zh-tw'] = '中文繁體';
$config->langs['en'] = 'English';
/* Default settings. */
$config->default = new stdclass();
$config->default->view = 'html'; // Default view.
$config->default->lang = 'en'; // Default language.
$config->default->theme = 'default'; // Default theme.
$config->default->module = 'index'; // Default module.
$config->default->method = 'index'; // Default method.
/* Upload settings. */
$config->file = new stdclass();
$config->file->dangers = 'php,jsp,py,rb,asp,'; // Dangerous files.
$config->file->maxSize = 1024 * 1024; // Max size.
/* Master database settings. */
$config->db = new stdclass();
$config->db->persistant = false; // Pconnect or not.
$config->db->driver = 'mysql'; // Must be MySQL. Don't support other database server yet.
$config->db->encoding = 'UTF8'; // Encoding of database.
$config->db->strictMode = false; // Turn off the strict mode of MySQL.
//$config->db->emulatePrepare = true; // PDO::ATTR_EMULATE_PREPARES
//$config->db->bufferQuery = true; // PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
/* Slave database settings. */
$config->slaveDB = new stdclass();
$config->slaveDB->persistant = false;
$config->slaveDB->driver = 'mysql';
$config->slaveDB->encoding = 'UTF8';
$config->slaveDB->strictMode = false;
$config->slaveDB->checkCentOS= true;
/* Include the custom config file. */
$configRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR;
$myConfig = $configRoot . 'my.php';
if(file_exists($myConfig)) include $myConfig;
/* Set default table prefix. */
if(!isset($config->db->prefix)) $config->db->prefix = 'zt_';
/* Define the tables. */
define('TABLE_COMPANY', '`' . $config->db->prefix . 'company`');
define('TABLE_DEPT', '`' . $config->db->prefix . 'dept`');
define('TABLE_CONFIG', '`' . $config->db->prefix . 'config`');
define('TABLE_USER', '`' . $config->db->prefix . 'user`');
define('TABLE_TODO', '`' . $config->db->prefix . 'todo`');
define('TABLE_GROUP', '`' . $config->db->prefix . 'group`');
define('TABLE_GROUPPRIV', '`' . $config->db->prefix . 'groupPriv`');
define('TABLE_USERGROUP', '`' . $config->db->prefix . 'userGroup`');
define('TABLE_USERQUERY', '`' . $config->db->prefix . 'userQuery`');
define('TABLE_USERCONTACT', '`' . $config->db->prefix . 'userContact`');
define('TABLE_BUG', '`' . $config->db->prefix . 'bug`');
define('TABLE_CASE', '`' . $config->db->prefix . 'case`');
define('TABLE_CASESTEP', '`' . $config->db->prefix . 'caseStep`');
define('TABLE_TESTTASK', '`' . $config->db->prefix . 'testTask`');
define('TABLE_TESTRUN', '`' . $config->db->prefix . 'testRun`');
define('TABLE_TESTRESULT', '`' . $config->db->prefix . 'testResult`');
define('TABLE_USERTPL', '`' . $config->db->prefix . 'userTPL`');
define('TABLE_PRODUCT', '`' . $config->db->prefix . 'product`');
define('TABLE_STORY', '`' . $config->db->prefix . 'story`');
define('TABLE_STORYSPEC', '`' . $config->db->prefix . 'storySpec`');
define('TABLE_PRODUCTPLAN', '`' . $config->db->prefix . 'productPlan`');
define('TABLE_RELEASE', '`' . $config->db->prefix . 'release`');
define('TABLE_PROJECT', '`' . $config->db->prefix . 'project`');
define('TABLE_TASK', '`' . $config->db->prefix . 'task`');
define('TABLE_TEAM', '`' . $config->db->prefix . 'team`');
define('TABLE_PROJECTPRODUCT','`' . $config->db->prefix . 'projectProduct`');
define('TABLE_PROJECTSTORY', '`' . $config->db->prefix . 'projectStory`');
define('TABLE_TASKESTIMATE', '`' . $config->db->prefix . 'taskEstimate`');
define('TABLE_EFFORT', '`' . $config->db->prefix . 'effort`');
define('TABLE_BURN', '`' . $config->db->prefix . 'burn`');
define('TABLE_BUILD', '`' . $config->db->prefix . 'build`');
define('TABLE_DOCLIB', '`' . $config->db->prefix . 'docLib`');
define('TABLE_DOC', '`' . $config->db->prefix . 'doc`');
define('TABLE_MODULE', '`' . $config->db->prefix . 'module`');
define('TABLE_ACTION', '`' . $config->db->prefix . 'action`');
define('TABLE_FILE', '`' . $config->db->prefix . 'file`');
define('TABLE_HISTORY', '`' . $config->db->prefix . 'history`');
define('TABLE_EXTENSION', '`' . $config->db->prefix . 'extension`');
define('TABLE_WEBAPP', '`' . $config->db->prefix . 'webapp`');
$config->objectTables['product'] = TABLE_PRODUCT;
$config->objectTables['story'] = TABLE_STORY;
$config->objectTables['productplan'] = TABLE_PRODUCTPLAN;
$config->objectTables['release'] = TABLE_RELEASE;
$config->objectTables['project'] = TABLE_PROJECT;
$config->objectTables['task'] = TABLE_TASK;
$config->objectTables['build'] = TABLE_BUILD;
$config->objectTables['bug'] = TABLE_BUG;
$config->objectTables['case'] = TABLE_CASE;
$config->objectTables['testcase'] = TABLE_CASE;
$config->objectTables['testtask'] = TABLE_TESTTASK;
$config->objectTables['user'] = TABLE_USER;
$config->objectTables['doc'] = TABLE_DOC;
$config->objectTables['doclib'] = TABLE_DOCLIB;
$config->objectTables['todo'] = TABLE_TODO;
/* Include extension config files. */
$extConfigFiles = glob($configRoot . 'ext/*.php');
if($extConfigFiles) foreach($extConfigFiles as $extConfigFile) include $extConfigFile;
<?php
/**
* The config file of ZenTaoPMS.
*
* Don't modify this file directly, copy the item to my.php and change it.
*
* @copyright Copyright 2009-2013 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package config
* @version $Id$
* @link http://www.zentao.net
*/
/* Basic settings. */
$config = new config();
$config->version = '4.0.beta2'; // The version of zentaopms. Don't change it.
$config->encoding = 'UTF-8'; // The encoding of zentaopms.
$config->cookieLife = time() + 2592000; // The cookie life time.
$config->timezone = 'Asia/Shanghai'; // The time zone setting, for more see http://www.php.net/manual/en/timezones.php
$config->webRoot = ''; // The root path of the pms.
/* The request settings. */
$config->requestType = 'PATH_INFO'; // The request type: PATH_INFO|GET, if PATH_INFO, must use url rewrite.
$config->pathType = 'clean'; // If the request type is PATH_INFO, the path type.
$config->requestFix = '-'; // The divider in the url when PATH_INFO.
$config->moduleVar = 'm'; // requestType=GET: the module var name.
$config->methodVar = 'f'; // requestType=GET: the method var name.
$config->viewVar = 't'; // requestType=GET: the view var name.
$config->sessionVar = 'sid'; // requestType=GET: the session var name.
/* Supported views. */
$config->views = ',html,json,';
/* Set the wide window size. */
$config->wideSize = 1400;
/* Supported languages. */
$config->langs['zh-cn'] = '中文简体';
$config->langs['zh-tw'] = '中文繁體';
$config->langs['en'] = 'English';
/* Default settings. */
$config->default = new stdclass();
$config->default->view = 'html'; // Default view.
$config->default->lang = 'en'; // Default language.
$config->default->theme = 'default'; // Default theme.
$config->default->module = 'index'; // Default module.
$config->default->method = 'index'; // Default method.
/* Upload settings. */
$config->file = new stdclass();
$config->file->dangers = 'php,jsp,py,rb,asp,'; // Dangerous files.
$config->file->maxSize = 1024 * 1024; // Max size.
/* Master database settings. */
$config->db = new stdclass();
$config->db->persistant = false; // Pconnect or not.
$config->db->driver = 'mysql'; // Must be MySQL. Don't support other database server yet.
$config->db->encoding = 'UTF8'; // Encoding of database.
$config->db->strictMode = false; // Turn off the strict mode of MySQL.
//$config->db->emulatePrepare = true; // PDO::ATTR_EMULATE_PREPARES
//$config->db->bufferQuery = true; // PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
/* Slave database settings. */
$config->slaveDB = new stdclass();
$config->slaveDB->persistant = false;
$config->slaveDB->driver = 'mysql';
$config->slaveDB->encoding = 'UTF8';
$config->slaveDB->strictMode = false;
$config->slaveDB->checkCentOS= true;
/* Include the custom config file. */
$configRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR;
$myConfig = $configRoot . 'my.php';
if(file_exists($myConfig)) include $myConfig;
/* Set default table prefix. */
if(!isset($config->db->prefix)) $config->db->prefix = 'zt_';
/* Define the tables. */
define('TABLE_COMPANY', '`' . $config->db->prefix . 'company`');
define('TABLE_DEPT', '`' . $config->db->prefix . 'dept`');
define('TABLE_CONFIG', '`' . $config->db->prefix . 'config`');
define('TABLE_USER', '`' . $config->db->prefix . 'user`');
define('TABLE_TODO', '`' . $config->db->prefix . 'todo`');
define('TABLE_GROUP', '`' . $config->db->prefix . 'group`');
define('TABLE_GROUPPRIV', '`' . $config->db->prefix . 'groupPriv`');
define('TABLE_USERGROUP', '`' . $config->db->prefix . 'userGroup`');
define('TABLE_USERQUERY', '`' . $config->db->prefix . 'userQuery`');
define('TABLE_USERCONTACT', '`' . $config->db->prefix . 'userContact`');
define('TABLE_BUG', '`' . $config->db->prefix . 'bug`');
define('TABLE_CASE', '`' . $config->db->prefix . 'case`');
define('TABLE_CASESTEP', '`' . $config->db->prefix . 'caseStep`');
define('TABLE_TESTTASK', '`' . $config->db->prefix . 'testTask`');
define('TABLE_TESTRUN', '`' . $config->db->prefix . 'testRun`');
define('TABLE_TESTRESULT', '`' . $config->db->prefix . 'testResult`');
define('TABLE_USERTPL', '`' . $config->db->prefix . 'userTPL`');
define('TABLE_PRODUCT', '`' . $config->db->prefix . 'product`');
define('TABLE_STORY', '`' . $config->db->prefix . 'story`');
define('TABLE_STORYSPEC', '`' . $config->db->prefix . 'storySpec`');
define('TABLE_PRODUCTPLAN', '`' . $config->db->prefix . 'productPlan`');
define('TABLE_RELEASE', '`' . $config->db->prefix . 'release`');
define('TABLE_PROJECT', '`' . $config->db->prefix . 'project`');
define('TABLE_TASK', '`' . $config->db->prefix . 'task`');
define('TABLE_TEAM', '`' . $config->db->prefix . 'team`');
define('TABLE_PROJECTPRODUCT','`' . $config->db->prefix . 'projectProduct`');
define('TABLE_PROJECTSTORY', '`' . $config->db->prefix . 'projectStory`');
define('TABLE_TASKESTIMATE', '`' . $config->db->prefix . 'taskEstimate`');
define('TABLE_EFFORT', '`' . $config->db->prefix . 'effort`');
define('TABLE_BURN', '`' . $config->db->prefix . 'burn`');
define('TABLE_BUILD', '`' . $config->db->prefix . 'build`');
define('TABLE_DOCLIB', '`' . $config->db->prefix . 'docLib`');
define('TABLE_DOC', '`' . $config->db->prefix . 'doc`');
define('TABLE_MODULE', '`' . $config->db->prefix . 'module`');
define('TABLE_ACTION', '`' . $config->db->prefix . 'action`');
define('TABLE_FILE', '`' . $config->db->prefix . 'file`');
define('TABLE_HISTORY', '`' . $config->db->prefix . 'history`');
define('TABLE_EXTENSION', '`' . $config->db->prefix . 'extension`');
define('TABLE_WEBAPP', '`' . $config->db->prefix . 'webapp`');
$config->objectTables['product'] = TABLE_PRODUCT;
$config->objectTables['story'] = TABLE_STORY;
$config->objectTables['productplan'] = TABLE_PRODUCTPLAN;
$config->objectTables['release'] = TABLE_RELEASE;
$config->objectTables['project'] = TABLE_PROJECT;
$config->objectTables['task'] = TABLE_TASK;
$config->objectTables['build'] = TABLE_BUILD;
$config->objectTables['bug'] = TABLE_BUG;
$config->objectTables['case'] = TABLE_CASE;
$config->objectTables['testcase'] = TABLE_CASE;
$config->objectTables['testtask'] = TABLE_TESTTASK;
$config->objectTables['user'] = TABLE_USER;
$config->objectTables['doc'] = TABLE_DOC;
$config->objectTables['doclib'] = TABLE_DOCLIB;
$config->objectTables['todo'] = TABLE_TODO;
/* Include extension config files. */
$extConfigFiles = glob($configRoot . 'ext/*.php');
if($extConfigFiles) foreach($extConfigFiles as $extConfigFile) include $extConfigFile;

View File

@@ -1,5 +1,5 @@
[InternetShortcut]
URL=http://www.zentao.net/help-read-79236.html
IDList=
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
[InternetShortcut]
URL=http://www.zentao.net/help-read-79236.html
IDList=
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2

View File

@@ -1,5 +1,5 @@
[InternetShortcut]
URL=http://www.zentao.net/help-read-79236.html
IDList=
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
[InternetShortcut]
URL=http://www.zentao.net/help-read-79236.html
IDList=
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2

View File

@@ -1,36 +1,36 @@
1. system required
zentao needs apache, php(>5.2) and mysql.
2. install the allinone package on windows
We have build an allinone package for windows systems. This package comes from the xampp project which is a great AMP tool.
2.1 download our .exe package.
2.2 double click the .exe and extract it into c:\xampp or d:\xampp, keep it under the root directory.
2.3 start zentao
cd c:\xampp, there'is control panel tools. double click it, it will stay on the tray menu at the bottom of the window.
click the zentao icon, then the menu will show, you can choose the "start zentao", waiting for a moment.
Then you can visit zentao through http://localhost/zentao/
3. install the allinone package on linux
We also build an allinone package for linux systems from the xampp tool.
3.1 download our .7z package, and save it to /opt/
3.2 cd /opt/ and chmod a+rx *.7z and then execute the 7z file, which will self extrct.
3.3 after extract, the directory should be /opt/lampp
3.4 cd /opt/lampp, and execute sudo ./start or sudo ./start88 to start apache in 88 port and mysql in 3308 port.
3.5 then you can visit zentao through http://localhost/zentao/
4. install the source code.
4.1 install one AMP package. you can install other AMP package. Make sure the version of apache, php and mysql meets the needs of zetnao.
4.2 download our zip package.
4.3 unpack it.
after download our zip package, save it to the apache's htdocs path and unpack it to zentaopms. make sure the zentaopms path can be
visited through browse.
4.4 start the installation
open your browser and visit the zentaopms path, for example http://192.168.1.1/zentaopms/, then the install wizard will launch, you can install it
step by step.
1. system required
zentao needs apache, php(>5.2) and mysql.
2. install the allinone package on windows
We have build an allinone package for windows systems. This package comes from the xampp project which is a great AMP tool.
2.1 download our .exe package.
2.2 double click the .exe and extract it into c:\xampp or d:\xampp, keep it under the root directory.
2.3 start zentao
cd c:\xampp, there'is control panel tools. double click it, it will stay on the tray menu at the bottom of the window.
click the zentao icon, then the menu will show, you can choose the "start zentao", waiting for a moment.
Then you can visit zentao through http://localhost/zentao/
3. install the allinone package on linux
We also build an allinone package for linux systems from the xampp tool.
3.1 download our .7z package, and save it to /opt/
3.2 cd /opt/ and chmod a+rx *.7z and then execute the 7z file, which will self extrct.
3.3 after extract, the directory should be /opt/lampp
3.4 cd /opt/lampp, and execute sudo ./start or sudo ./start88 to start apache in 88 port and mysql in 3308 port.
3.5 then you can visit zentao through http://localhost/zentao/
4. install the source code.
4.1 install one AMP package. you can install other AMP package. Make sure the version of apache, php and mysql meets the needs of zetnao.
4.2 download our zip package.
4.3 unpack it.
after download our zip package, save it to the apache's htdocs path and unpack it to zentaopms. make sure the zentaopms path can be
visited through browse.
4.4 start the installation
open your browser and visit the zentaopms path, for example http://192.168.1.1/zentaopms/, then the install wizard will launch, you can install it
step by step.

View File

@@ -1,22 +1,22 @@
禅道项目管理软件在开发过程中,得到了众多朋友的支持,在此表示感谢。
下面是不完全名单如有遗漏烦请告知chunsheng#cnezsoft.com
感谢各位购买禅道产品或者服务的客户,有您的支持,禅道会越走越坚定,越来越踏实;
感谢之前所有参与或帮助过BugFree1.x的朋友们有你们陪着一路走来才有了禅道今天的发展尤其感谢原来的版主 Mr.lee希望有机会再合作
感谢BugFree2.x项目的团队和你们的分歧最终促使我来做一款真正的项目管理软件而非仅仅微软的复制品
感谢原阿里巴巴的同事梅坚先生是你将scrum介绍到了中国雅虎正是那时我开始了解学习scrum
感谢原阿里巴巴的同事史峰先生,感谢你在禅道项目设计初期提出的很多建议;
感谢我的好朋友李玉鹏,感谢我们之间心有灵犀的讨论,确定了禅道很多的设计方案;
感谢原阿里巴巴的其他同事们,禅道的很多想法正是和你们工作时碰撞产生的火花;
感谢普加网青岛普加智能信息有限公司www.pujia.com在禅道前期开发过程中给予的大力支持;
感谢whjmyu, sophia, 21bird, 云飞扬对禅道项目的贡献,谢谢你们的辛勤付出;
感谢各位贡献QQ群的群主们有了你们的QQ群我们才有更好的沟通交流的地方
感谢众多网友积极给予的建议和反馈,有你们的参与,禅道会越来越好;
感谢ELING(QQ:467303906)设计了精美的Logo感谢蓝虎魄(QQ:649009995)设计了禅道1.0正式版的界面感谢catouse设计的最新版本的界面
感谢公司成立以来曾一起共事过的朋友,虽然我们不再是同事,但感谢你们在禅道最困难的时候对禅道的付出;
感谢我们现在一起共事的同事,感谢您的不离不弃,一起坚守,相信我们一起努力,会赢得一片属于自己的自由璀璨的天空;
王春生 青岛易软天创网络科技有限公司
2012-10-8
禅道项目管理软件在开发过程中,得到了众多朋友的支持,在此表示感谢。
下面是不完全名单如有遗漏烦请告知chunsheng#cnezsoft.com
感谢各位购买禅道产品或者服务的客户,有您的支持,禅道会越走越坚定,越来越踏实;
感谢之前所有参与或帮助过BugFree1.x的朋友们有你们陪着一路走来才有了禅道今天的发展尤其感谢原来的版主 Mr.lee希望有机会再合作
感谢BugFree2.x项目的团队和你们的分歧最终促使我来做一款真正的项目管理软件而非仅仅微软的复制品
感谢原阿里巴巴的同事梅坚先生是你将scrum介绍到了中国雅虎正是那时我开始了解学习scrum
感谢原阿里巴巴的同事史峰先生,感谢你在禅道项目设计初期提出的很多建议;
感谢我的好朋友李玉鹏,感谢我们之间心有灵犀的讨论,确定了禅道很多的设计方案;
感谢原阿里巴巴的其他同事们,禅道的很多想法正是和你们工作时碰撞产生的火花;
感谢普加网青岛普加智能信息有限公司www.pujia.com在禅道前期开发过程中给予的大力支持;
感谢whjmyu, sophia, 21bird, 云飞扬对禅道项目的贡献,谢谢你们的辛勤付出;
感谢各位贡献QQ群的群主们有了你们的QQ群我们才有更好的沟通交流的地方
感谢众多网友积极给予的建议和反馈,有你们的参与,禅道会越来越好;
感谢ELING(QQ:467303906)设计了精美的Logo感谢蓝虎魄(QQ:649009995)设计了禅道1.0正式版的界面感谢catouse设计的最新版本的界面
感谢公司成立以来曾一起共事过的朋友,虽然我们不再是同事,但感谢你们在禅道最困难的时候对禅道的付出;
感谢我们现在一起共事的同事,感谢您的不离不弃,一起坚守,相信我们一起努力,会赢得一片属于自己的自由璀璨的天空;
王春生 青岛易软天创网络科技有限公司
2012-10-8

View File

@@ -1,5 +1,5 @@
[InternetShortcut]
URL=http://www.zentao.net/video-browse.html
IDList=
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
[InternetShortcut]
URL=http://www.zentao.net/video-browse.html
IDList=
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,421 +1,421 @@
// --------------------------------------------------------------------------------
// PclZip 2.8.2 - readme.txt
// --------------------------------------------------------------------------------
// License GNU/LGPL - August 2009
// Vincent Blavet - vincent@phpconcept.net
// http://www.phpconcept.net
// --------------------------------------------------------------------------------
// $Id: readme.txt,v 1.60 2009/09/30 20:35:21 vblavet Exp $
// --------------------------------------------------------------------------------
0 - Sommaire
============
1 - Introduction
2 - What's new
3 - Corrected bugs
4 - Known bugs or limitations
5 - License
6 - Warning
7 - Documentation
8 - Author
9 - Contribute
1 - Introduction
================
PclZip is a library that allow you to manage a Zip archive.
Full documentation about PclZip can be found here : http://www.phpconcept.net/pclzip
2 - What's new
==============
Version 2.8.2 :
- PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with
extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string
can also be modified in the post-extract call back.
**Bugs correction :
- PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly
- Remove use of eval() and do direct call to callback functions
- Correct support of 64bits systems (Thanks to WordPress team)
Version 2.8.1 :
- Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is
deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will
automatically replace it by PCLZIP_OPT_BY_PREG.
Version 2.8 :
- Improve extraction of zip archive for large files by using temporary files
This feature is working like the one defined in r2.7.
Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF,
PCLZIP_OPT_TEMP_FILE_THRESHOLD
- Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto
sense of temporary file use.
- Bug correction : Reduce filepath in returned file list to remove ennoying
'.//' preambule in file path.
Version 2.7 :
- Improve creation of zip archive for large files :
PclZip will now autosense the configured memory and use temporary files
when large file is suspected.
This feature can also ne triggered by manual options in create() and add()
methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files,
'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic,
'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size
threshold to use temporary files.
Using "temporary files" rather than "memory" might take more time, but
might give the ability to zip very large files :
Tested on my win laptop with a 88Mo file :
Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo)
Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo)
- Replace use of mktime() by time() to limit the E_STRICT error messages.
- Bug correction : When adding files with full windows path (drive letter)
PclZip is now working. Before, if the drive letter is not the default
path, PclZip was not able to add the file.
Version 2.6 :
- Code optimisation
- New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to
add a comment for a specific file. (Don't really know if this is usefull)
- New attribute PCLZIP_ATT_FILE_CONTENT gives the ability to add a string
as a file.
- New attribute PCLZIP_ATT_FILE_MTIME modify the timestamp associated with
a file.
- Correct a bug. Files archived with a timestamp with 0h0m0s were extracted
with current time
- Add CRC value in the informations returned back for each file after an
action.
- Add missing closedir() statement.
- When adding a folder, and removing the path of this folder, files were
incorrectly added with a '/' at the beginning. Which means files are
related to root in unix systems. Corrected.
- Add conditional if before constant definition. This will allow users
to redefine constants without changing the file, and then improve
upgrade of pclzip code for new versions.
Version 2.5 :
- Introduce the ability to add file/folder with individual properties (file descriptor).
This gives for example the ability to change the filename of a zipped file.
. Able to add files individually
. Able to change full name
. Able to change short name
. Compatible with global options
- New attributes : PCLZIP_ATT_FILE_NAME, PCLZIP_ATT_FILE_NEW_SHORT_NAME, PCLZIP_ATT_FILE_NEW_FULL_NAME
- New error code : PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE
- Add a security control feature. PclZip can extract any file in any folder
of a system. People may use this to upload a zip file and try to override
a system file. The PCLZIP_OPT_EXTRACT_DIR_RESTRICTION will give the
ability to forgive any directory transversal behavior.
- New PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : check extraction path
- New error code : PCLZIP_ERR_DIRECTORY_RESTRICTION
- Modification in PclZipUtilPathInclusion() : dir and path beginning with ./ will be prepend
by current path (getcwd())
Version 2.4 :
- Code improvment : try to speed up the code by removing unusefull call to pack()
- Correct bug in delete() : delete() should be called with no argument. This was not
the case in 2.3. This is corrected in 2.4.
- Correct a bug in path_inclusion function. When the path has several '../../', the
result was bad.
- Add a check for magic_quotes_runtime configuration. If enabled, PclZip will
disable it while working and det it back to its original value.
This resolve a lots of bad formated archive errors.
- Bug correction : PclZip now correctly unzip file in some specific situation,
when compressed content has same size as uncompressed content.
- Bug correction : When selecting option 'PCLZIP_OPT_REMOVE_ALL_PATH',
directories are not any more created.
- Code improvment : correct unclosed opendir(), better handling of . and .. in
loops.
Version 2.3 :
- Correct a bug with PHP5 : affecting the value 0xFE49FFE0 to a variable does not
give the same result in PHP4 and PHP5 ....
Version 2.2 :
- Try development of PCLZIP_OPT_CRYPT .....
However this becomes to a stop. To crypt/decrypt I need to multiply 2 long integers,
the result (greater than a long) is not supported by PHP. Even the use of bcmath
functions does not help. I did not find yet a solution ...;
- Add missing '/' at end of directory entries
- Check is a file is encrypted or not. Returns status 'unsupported_encryption' and/or
error code PCLZIP_ERR_UNSUPPORTED_ENCRYPTION.
- Corrected : Bad "version need to extract" field in local file header
- Add private method privCheckFileHeaders() in order to check local and central
file headers. PclZip is now supporting purpose bit flag bit 3. Purpose bit flag bit 3 gives
the ability to have a local file header without size, compressed size and crc filled.
- Add a generic status 'error' for file status
- Add control of compression type. PclZip only support deflate compression method.
Before v2.2, PclZip does not check the compression method used in an archive while
extracting. With v2.2 PclZip returns a new error status for a file using an unsupported
compression method. New status is "unsupported_compression". New error code is
PCLZIP_ERR_UNSUPPORTED_COMPRESSION.
- Add optional attribute PCLZIP_OPT_STOP_ON_ERROR. This will stop the extract of files
when errors like 'a folder with same name exists' or 'a newer file exists' or
'a write protected file' exists, rather than set a status for the concerning file
and resume the extract of the zip.
- Add optional attribute PCLZIP_OPT_REPLACE_NEWER. This will force, during an extract' the
replacement of the file, even if a newer version of the file exists.
Note that today if a file with the same name already exists but is older it will be
replaced by the extracted one.
- Improve PclZipUtilOption()
- Support of zip archive with trailing bytes. Before 2.2, PclZip checks that the central
directory structure is the last data in the archive. Crypt encryption/decryption of
zip archive put trailing 0 bytes after decryption. PclZip is now supporting this.
Version 2.1 :
- Add the ability to abort the extraction by using a user callback function.
The user can now return the value '2' in its callback which indicates to stop the
extraction. For a pre call-back extract is stopped before the extration of the current
file. For a post call back, the extraction is stopped after.
- Add the ability to extract a file (or several files) directly in the standard output.
This is done by the new parameter PCLZIP_OPT_EXTRACT_IN_OUTPUT with method extract().
- Add support for parameters PCLZIP_OPT_COMMENT, PCLZIP_OPT_ADD_COMMENT,
PCLZIP_OPT_PREPEND_COMMENT. This will create, replace, add, or prepend comments
in the zip archive.
- When merging two archives, the comments are not any more lost, but merged, with a
blank space separator.
- Corrected bug : Files are not deleted when all files are asked to be deleted.
- Corrected bug : Folders with name '0' made PclZip to abort the create or add feature.
Version 2.0 :
***** Warning : Some new features may break the backward compatibility for your scripts.
Please carefully read the readme file.
- Add the ability to delete by Index, name and regular expression. This feature is
performed by the method delete(), which uses the optional parameters
PCLZIP_OPT_BY_INDEX, PCLZIP_OPT_BY_NAME, PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG.
- Add the ability to extract by regular expression. To extract by regexp you must use the method
extract(), with the option PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG
(depending if you want to use ereg() or preg_match() syntax) followed by the
regular expression pattern.
- Add the ability to extract by index, directly with the extract() method. This is a
code improvment of the extractByIndex() method.
- Add the ability to extract by name. To extract by name you must use the method
extract(), with the option PCLZIP_OPT_BY_NAME followed by the filename to
extract or an array of filenames to extract. To extract all a folder, use the folder
name rather than the filename with a '/' at the end.
- Add the ability to add files without compression. This is done with a new attribute
which is PCLZIP_OPT_NO_COMPRESSION.
- Add the attribute PCLZIP_OPT_EXTRACT_AS_STRING, which allow to extract a file directly
in a string without using any file (or temporary file).
- Add constant PCLZIP_SEPARATOR for static configuration of filename separators in a single string.
The default separator is now a comma (,) and not any more a blank space.
THIS BREAK THE BACKWARD COMPATIBILITY : Please check if this may have an impact with
your script.
- Improve algorythm performance by removing the use of temporary files when adding or
extracting files in an archive.
- Add (correct) detection of empty filename zipping. This can occurs when the removed
path is the same
as a zipped dir. The dir is not zipped (['status'] = filtered), only its content.
- Add better support for windows paths (thanks for help from manus@manusfreedom.com).
- Corrected bug : When the archive file already exists with size=0, the add() method
fails. Corrected in 2.0.
- Remove the use of OS_WINDOWS constant. Use php_uname() function rather.
- Control the order of index ranges in extract by index feature.
- Change the internal management of folders (better handling of internal flag).
Version 1.3 :
- Removing the double include check. This is now done by include_once() and require_once()
PHP directives.
- Changing the error handling mecanism : Remove the use of an external error library.
The former PclError...() functions are replaced by internal equivalent methods.
By changing the environment variable PCLZIP_ERROR_EXTERNAL you can still use the former library.
Introducing the use of constants for error codes rather than integer values. This will help
in futur improvment.
Introduction of error handling functions like errorCode(), errorName() and errorInfo().
- Remove the deprecated use of calling function with arguments passed by reference.
- Add the calling of extract(), extractByIndex(), create() and add() functions
with variable options rather than fixed arguments.
- Add the ability to remove all the file path while extracting or adding,
without any need to specify the path to remove.
This is available for extract(), extractByIndex(), create() and add() functionS by using
the new variable options parameters :
- PCLZIP_OPT_REMOVE_ALL_PATH : by indicating this option while calling the fct.
- Ability to change the mode of a file after the extraction (chmod()).
This is available for extract() and extractByIndex() functionS by using
the new variable options parameters.
- PCLZIP_OPT_SET_CHMOD : by setting the value of this option.
- Ability to definition call-back options. These call-back will be called during the adding,
or the extracting of file (extract(), extractByIndex(), create() and add() functions) :
- PCLZIP_CB_PRE_EXTRACT : will be called before each extraction of a file. The user
can trigerred the change the filename of the extracted file. The user can triggered the
skip of the extraction. This is adding a 'skipped' status in the file list result value.
- PCLZIP_CB_POST_EXTRACT : will be called after each extraction of a file.
Nothing can be triggered from that point.
- PCLZIP_CB_PRE_ADD : will be called before each add of a file. The user
can trigerred the change the stored filename of the added file. The user can triggered the
skip of the add. This is adding a 'skipped' status in the file list result value.
- PCLZIP_CB_POST_ADD : will be called after each add of a file.
Nothing can be triggered from that point.
- Two status are added in the file list returned as function result : skipped & filename_too_long
'skipped' is used when a call-back function ask for skipping the file.
'filename_too_long' is used while adding a file with a too long filename to archive (the file is
not added)
- Adding the function PclZipUtilPathInclusion(), that check the inclusion of a path into
a directory.
- Add a check of the presence of the archive file before some actions (like list, ...)
- Add the initialisation of field "index" in header array. This means that by
default index will be -1 when not explicitly set by the methods.
Version 1.2 :
- Adding a duplicate function.
- Adding a merge function. The merge function is a "quick merge" function,
it just append the content of an archive at the end of the first one. There
is no check for duplicate files or more recent files.
- Improve the search of the central directory end.
Version 1.1.2 :
- Changing the license of PclZip. PclZip is now released under the GNU / LGPL license
(see License section).
- Adding the optional support of a static temporary directory. You will need to configure
the constant PCLZIP_TEMPORARY_DIR if you want to use this feature.
- Improving the rename() function. In some cases rename() does not work (different
Filesystems), so it will be replaced by a copy() + unlink() functions.
Version 1.1.1 :
- Maintenance release, no new feature.
Version 1.1 :
- New method Add() : adding files in the archive
- New method ExtractByIndex() : partial extract of the archive, files are identified by
their index in the archive
- New method DeleteByIndex() : delete some files/folder entries from the archive,
files are identified by their index in the archive.
- Adding a test of the zlib extension presence. If not present abort the script.
Version 1.0.1 :
- No new feature
3 - Corrected bugs
==================
Corrected in Version 2.0 :
- Corrected : During an extraction, if a call-back fucntion is used and try to skip
a file, all the extraction process is stopped.
Corrected in Version 1.3 :
- Corrected : Support of static synopsis for method extract() is broken.
- Corrected : invalid size of archive content field (0xFF) should be (0xFFFF).
- Corrected : When an extract is done with a remove_path parameter, the entry for
the directory with exactly the same path is not skipped/filtered.
- Corrected : extractByIndex() and deleteByIndex() were not managing index in the
right way. For example indexes '1,3-5,11' will only extract files 1 and 11. This
is due to a sort of the index resulting table that puts 11 before 3-5 (sort on
string and not interger). The sort is temporarilly removed, this means that
you must provide a sorted list of index ranges.
Corrected in Version 1.2 :
- Nothing.
Corrected in Version 1.1.2 :
- Corrected : Winzip is unable to delete or add new files in a PclZip created archives.
Corrected in Version 1.1.1 :
- Corrected : When archived file is not compressed (0% compression), the
extract method fails.
Corrected in Version 1.1 :
- Corrected : Adding a complete tree of folder may result in a bad archive
creation.
Corrected in Version 1.0.1 :
- Corrected : Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
4 - Known bugs or limitations
=============================
Please publish bugs reports in SourceForge :
http://sourceforge.net/tracker/?group_id=40254&atid=427564
In Version 2.x :
- PclZip does only support file uncompressed or compressed with deflate (compression method 8)
- PclZip does not support password protected zip archive
- Some concern were seen when changing mtime of a file while archiving.
Seems to be linked to Daylight Saving Time (PclTest_changing_mtime).
In Version 1.2 :
- merge() methods does not check for duplicate files or last date of modifications.
In Version 1.1 :
- Limitation : Using 'extract' fields in the file header in the zip archive is not supported.
- WinZip is unable to delete a single file in a PclZip created archive. It is also unable to
add a file in a PclZip created archive. (Corrected in v.1.2)
In Version 1.0.1 :
- Adding a complete tree of folder may result in a bad archive
creation. (Corrected in V.1.1).
- Path given to methods must be in the unix format (/) and not the Windows format (\).
Workaround : Use only / directory separators.
- PclZip is using temporary files that are sometime the name of the file with a .tmp or .gz
added suffix. Files with these names may already exist and may be overwritten.
Workaround : none.
- PclZip does not check if the zlib extension is present. If it is absent, the zip
file is not created and the lib abort without warning.
Workaround : enable the zlib extension on the php install
In Version 1.0 :
- Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
(Corrected in v.1.0.1)
- Limitation : Multi-disk zip archive are not supported.
5 - License
===========
Since version 1.1.2, PclZip Library is released under GNU/LGPL license.
This library is free, so you can use it at no cost.
HOWEVER, if you release a script, an application, a library or any kind of
code using PclZip library (or a part of it), YOU MUST :
- Indicate in the documentation (or a readme file), that your work
uses PclZip Library, and make a reference to the author and the web site
http://www.phpconcept.net
- Gives the ability to the final user to update the PclZip libary.
I will also appreciate that you send me a mail (vincent@phpconcept.net), just to
be aware that someone is using PclZip.
For more information about GNU/LGPL license : http://www.gnu.org
6 - Warning
=================
This library and the associated files are non commercial, non professional work.
It should not have unexpected results. However if any damage is caused by this software
the author can not be responsible.
The use of this software is at the risk of the user.
7 - Documentation
=================
PclZip User Manuel is available in English on PhpConcept : http://www.phpconcept.net/pclzip/man/en/index.php
A Russian translation was done by Feskov Kuzma : http://php.russofile.ru/ru/authors/unsort/zip/
8 - Author
==========
This software was written by Vincent Blavet (vincent@phpconcept.net) on its leasure time.
9 - Contribute
==============
If you want to contribute to the development of PclZip, please contact vincent@phpconcept.net.
If you can help in financing PhpConcept hosting service, please go to
http://www.phpconcept.net/soutien.php
// --------------------------------------------------------------------------------
// PclZip 2.8.2 - readme.txt
// --------------------------------------------------------------------------------
// License GNU/LGPL - August 2009
// Vincent Blavet - vincent@phpconcept.net
// http://www.phpconcept.net
// --------------------------------------------------------------------------------
// $Id: readme.txt,v 1.60 2009/09/30 20:35:21 vblavet Exp $
// --------------------------------------------------------------------------------
0 - Sommaire
============
1 - Introduction
2 - What's new
3 - Corrected bugs
4 - Known bugs or limitations
5 - License
6 - Warning
7 - Documentation
8 - Author
9 - Contribute
1 - Introduction
================
PclZip is a library that allow you to manage a Zip archive.
Full documentation about PclZip can be found here : http://www.phpconcept.net/pclzip
2 - What's new
==============
Version 2.8.2 :
- PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with
extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string
can also be modified in the post-extract call back.
**Bugs correction :
- PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly
- Remove use of eval() and do direct call to callback functions
- Correct support of 64bits systems (Thanks to WordPress team)
Version 2.8.1 :
- Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is
deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will
automatically replace it by PCLZIP_OPT_BY_PREG.
Version 2.8 :
- Improve extraction of zip archive for large files by using temporary files
This feature is working like the one defined in r2.7.
Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF,
PCLZIP_OPT_TEMP_FILE_THRESHOLD
- Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto
sense of temporary file use.
- Bug correction : Reduce filepath in returned file list to remove ennoying
'.//' preambule in file path.
Version 2.7 :
- Improve creation of zip archive for large files :
PclZip will now autosense the configured memory and use temporary files
when large file is suspected.
This feature can also ne triggered by manual options in create() and add()
methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files,
'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic,
'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size
threshold to use temporary files.
Using "temporary files" rather than "memory" might take more time, but
might give the ability to zip very large files :
Tested on my win laptop with a 88Mo file :
Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo)
Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo)
- Replace use of mktime() by time() to limit the E_STRICT error messages.
- Bug correction : When adding files with full windows path (drive letter)
PclZip is now working. Before, if the drive letter is not the default
path, PclZip was not able to add the file.
Version 2.6 :
- Code optimisation
- New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to
add a comment for a specific file. (Don't really know if this is usefull)
- New attribute PCLZIP_ATT_FILE_CONTENT gives the ability to add a string
as a file.
- New attribute PCLZIP_ATT_FILE_MTIME modify the timestamp associated with
a file.
- Correct a bug. Files archived with a timestamp with 0h0m0s were extracted
with current time
- Add CRC value in the informations returned back for each file after an
action.
- Add missing closedir() statement.
- When adding a folder, and removing the path of this folder, files were
incorrectly added with a '/' at the beginning. Which means files are
related to root in unix systems. Corrected.
- Add conditional if before constant definition. This will allow users
to redefine constants without changing the file, and then improve
upgrade of pclzip code for new versions.
Version 2.5 :
- Introduce the ability to add file/folder with individual properties (file descriptor).
This gives for example the ability to change the filename of a zipped file.
. Able to add files individually
. Able to change full name
. Able to change short name
. Compatible with global options
- New attributes : PCLZIP_ATT_FILE_NAME, PCLZIP_ATT_FILE_NEW_SHORT_NAME, PCLZIP_ATT_FILE_NEW_FULL_NAME
- New error code : PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE
- Add a security control feature. PclZip can extract any file in any folder
of a system. People may use this to upload a zip file and try to override
a system file. The PCLZIP_OPT_EXTRACT_DIR_RESTRICTION will give the
ability to forgive any directory transversal behavior.
- New PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : check extraction path
- New error code : PCLZIP_ERR_DIRECTORY_RESTRICTION
- Modification in PclZipUtilPathInclusion() : dir and path beginning with ./ will be prepend
by current path (getcwd())
Version 2.4 :
- Code improvment : try to speed up the code by removing unusefull call to pack()
- Correct bug in delete() : delete() should be called with no argument. This was not
the case in 2.3. This is corrected in 2.4.
- Correct a bug in path_inclusion function. When the path has several '../../', the
result was bad.
- Add a check for magic_quotes_runtime configuration. If enabled, PclZip will
disable it while working and det it back to its original value.
This resolve a lots of bad formated archive errors.
- Bug correction : PclZip now correctly unzip file in some specific situation,
when compressed content has same size as uncompressed content.
- Bug correction : When selecting option 'PCLZIP_OPT_REMOVE_ALL_PATH',
directories are not any more created.
- Code improvment : correct unclosed opendir(), better handling of . and .. in
loops.
Version 2.3 :
- Correct a bug with PHP5 : affecting the value 0xFE49FFE0 to a variable does not
give the same result in PHP4 and PHP5 ....
Version 2.2 :
- Try development of PCLZIP_OPT_CRYPT .....
However this becomes to a stop. To crypt/decrypt I need to multiply 2 long integers,
the result (greater than a long) is not supported by PHP. Even the use of bcmath
functions does not help. I did not find yet a solution ...;
- Add missing '/' at end of directory entries
- Check is a file is encrypted or not. Returns status 'unsupported_encryption' and/or
error code PCLZIP_ERR_UNSUPPORTED_ENCRYPTION.
- Corrected : Bad "version need to extract" field in local file header
- Add private method privCheckFileHeaders() in order to check local and central
file headers. PclZip is now supporting purpose bit flag bit 3. Purpose bit flag bit 3 gives
the ability to have a local file header without size, compressed size and crc filled.
- Add a generic status 'error' for file status
- Add control of compression type. PclZip only support deflate compression method.
Before v2.2, PclZip does not check the compression method used in an archive while
extracting. With v2.2 PclZip returns a new error status for a file using an unsupported
compression method. New status is "unsupported_compression". New error code is
PCLZIP_ERR_UNSUPPORTED_COMPRESSION.
- Add optional attribute PCLZIP_OPT_STOP_ON_ERROR. This will stop the extract of files
when errors like 'a folder with same name exists' or 'a newer file exists' or
'a write protected file' exists, rather than set a status for the concerning file
and resume the extract of the zip.
- Add optional attribute PCLZIP_OPT_REPLACE_NEWER. This will force, during an extract' the
replacement of the file, even if a newer version of the file exists.
Note that today if a file with the same name already exists but is older it will be
replaced by the extracted one.
- Improve PclZipUtilOption()
- Support of zip archive with trailing bytes. Before 2.2, PclZip checks that the central
directory structure is the last data in the archive. Crypt encryption/decryption of
zip archive put trailing 0 bytes after decryption. PclZip is now supporting this.
Version 2.1 :
- Add the ability to abort the extraction by using a user callback function.
The user can now return the value '2' in its callback which indicates to stop the
extraction. For a pre call-back extract is stopped before the extration of the current
file. For a post call back, the extraction is stopped after.
- Add the ability to extract a file (or several files) directly in the standard output.
This is done by the new parameter PCLZIP_OPT_EXTRACT_IN_OUTPUT with method extract().
- Add support for parameters PCLZIP_OPT_COMMENT, PCLZIP_OPT_ADD_COMMENT,
PCLZIP_OPT_PREPEND_COMMENT. This will create, replace, add, or prepend comments
in the zip archive.
- When merging two archives, the comments are not any more lost, but merged, with a
blank space separator.
- Corrected bug : Files are not deleted when all files are asked to be deleted.
- Corrected bug : Folders with name '0' made PclZip to abort the create or add feature.
Version 2.0 :
***** Warning : Some new features may break the backward compatibility for your scripts.
Please carefully read the readme file.
- Add the ability to delete by Index, name and regular expression. This feature is
performed by the method delete(), which uses the optional parameters
PCLZIP_OPT_BY_INDEX, PCLZIP_OPT_BY_NAME, PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG.
- Add the ability to extract by regular expression. To extract by regexp you must use the method
extract(), with the option PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG
(depending if you want to use ereg() or preg_match() syntax) followed by the
regular expression pattern.
- Add the ability to extract by index, directly with the extract() method. This is a
code improvment of the extractByIndex() method.
- Add the ability to extract by name. To extract by name you must use the method
extract(), with the option PCLZIP_OPT_BY_NAME followed by the filename to
extract or an array of filenames to extract. To extract all a folder, use the folder
name rather than the filename with a '/' at the end.
- Add the ability to add files without compression. This is done with a new attribute
which is PCLZIP_OPT_NO_COMPRESSION.
- Add the attribute PCLZIP_OPT_EXTRACT_AS_STRING, which allow to extract a file directly
in a string without using any file (or temporary file).
- Add constant PCLZIP_SEPARATOR for static configuration of filename separators in a single string.
The default separator is now a comma (,) and not any more a blank space.
THIS BREAK THE BACKWARD COMPATIBILITY : Please check if this may have an impact with
your script.
- Improve algorythm performance by removing the use of temporary files when adding or
extracting files in an archive.
- Add (correct) detection of empty filename zipping. This can occurs when the removed
path is the same
as a zipped dir. The dir is not zipped (['status'] = filtered), only its content.
- Add better support for windows paths (thanks for help from manus@manusfreedom.com).
- Corrected bug : When the archive file already exists with size=0, the add() method
fails. Corrected in 2.0.
- Remove the use of OS_WINDOWS constant. Use php_uname() function rather.
- Control the order of index ranges in extract by index feature.
- Change the internal management of folders (better handling of internal flag).
Version 1.3 :
- Removing the double include check. This is now done by include_once() and require_once()
PHP directives.
- Changing the error handling mecanism : Remove the use of an external error library.
The former PclError...() functions are replaced by internal equivalent methods.
By changing the environment variable PCLZIP_ERROR_EXTERNAL you can still use the former library.
Introducing the use of constants for error codes rather than integer values. This will help
in futur improvment.
Introduction of error handling functions like errorCode(), errorName() and errorInfo().
- Remove the deprecated use of calling function with arguments passed by reference.
- Add the calling of extract(), extractByIndex(), create() and add() functions
with variable options rather than fixed arguments.
- Add the ability to remove all the file path while extracting or adding,
without any need to specify the path to remove.
This is available for extract(), extractByIndex(), create() and add() functionS by using
the new variable options parameters :
- PCLZIP_OPT_REMOVE_ALL_PATH : by indicating this option while calling the fct.
- Ability to change the mode of a file after the extraction (chmod()).
This is available for extract() and extractByIndex() functionS by using
the new variable options parameters.
- PCLZIP_OPT_SET_CHMOD : by setting the value of this option.
- Ability to definition call-back options. These call-back will be called during the adding,
or the extracting of file (extract(), extractByIndex(), create() and add() functions) :
- PCLZIP_CB_PRE_EXTRACT : will be called before each extraction of a file. The user
can trigerred the change the filename of the extracted file. The user can triggered the
skip of the extraction. This is adding a 'skipped' status in the file list result value.
- PCLZIP_CB_POST_EXTRACT : will be called after each extraction of a file.
Nothing can be triggered from that point.
- PCLZIP_CB_PRE_ADD : will be called before each add of a file. The user
can trigerred the change the stored filename of the added file. The user can triggered the
skip of the add. This is adding a 'skipped' status in the file list result value.
- PCLZIP_CB_POST_ADD : will be called after each add of a file.
Nothing can be triggered from that point.
- Two status are added in the file list returned as function result : skipped & filename_too_long
'skipped' is used when a call-back function ask for skipping the file.
'filename_too_long' is used while adding a file with a too long filename to archive (the file is
not added)
- Adding the function PclZipUtilPathInclusion(), that check the inclusion of a path into
a directory.
- Add a check of the presence of the archive file before some actions (like list, ...)
- Add the initialisation of field "index" in header array. This means that by
default index will be -1 when not explicitly set by the methods.
Version 1.2 :
- Adding a duplicate function.
- Adding a merge function. The merge function is a "quick merge" function,
it just append the content of an archive at the end of the first one. There
is no check for duplicate files or more recent files.
- Improve the search of the central directory end.
Version 1.1.2 :
- Changing the license of PclZip. PclZip is now released under the GNU / LGPL license
(see License section).
- Adding the optional support of a static temporary directory. You will need to configure
the constant PCLZIP_TEMPORARY_DIR if you want to use this feature.
- Improving the rename() function. In some cases rename() does not work (different
Filesystems), so it will be replaced by a copy() + unlink() functions.
Version 1.1.1 :
- Maintenance release, no new feature.
Version 1.1 :
- New method Add() : adding files in the archive
- New method ExtractByIndex() : partial extract of the archive, files are identified by
their index in the archive
- New method DeleteByIndex() : delete some files/folder entries from the archive,
files are identified by their index in the archive.
- Adding a test of the zlib extension presence. If not present abort the script.
Version 1.0.1 :
- No new feature
3 - Corrected bugs
==================
Corrected in Version 2.0 :
- Corrected : During an extraction, if a call-back fucntion is used and try to skip
a file, all the extraction process is stopped.
Corrected in Version 1.3 :
- Corrected : Support of static synopsis for method extract() is broken.
- Corrected : invalid size of archive content field (0xFF) should be (0xFFFF).
- Corrected : When an extract is done with a remove_path parameter, the entry for
the directory with exactly the same path is not skipped/filtered.
- Corrected : extractByIndex() and deleteByIndex() were not managing index in the
right way. For example indexes '1,3-5,11' will only extract files 1 and 11. This
is due to a sort of the index resulting table that puts 11 before 3-5 (sort on
string and not interger). The sort is temporarilly removed, this means that
you must provide a sorted list of index ranges.
Corrected in Version 1.2 :
- Nothing.
Corrected in Version 1.1.2 :
- Corrected : Winzip is unable to delete or add new files in a PclZip created archives.
Corrected in Version 1.1.1 :
- Corrected : When archived file is not compressed (0% compression), the
extract method fails.
Corrected in Version 1.1 :
- Corrected : Adding a complete tree of folder may result in a bad archive
creation.
Corrected in Version 1.0.1 :
- Corrected : Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
4 - Known bugs or limitations
=============================
Please publish bugs reports in SourceForge :
http://sourceforge.net/tracker/?group_id=40254&atid=427564
In Version 2.x :
- PclZip does only support file uncompressed or compressed with deflate (compression method 8)
- PclZip does not support password protected zip archive
- Some concern were seen when changing mtime of a file while archiving.
Seems to be linked to Daylight Saving Time (PclTest_changing_mtime).
In Version 1.2 :
- merge() methods does not check for duplicate files or last date of modifications.
In Version 1.1 :
- Limitation : Using 'extract' fields in the file header in the zip archive is not supported.
- WinZip is unable to delete a single file in a PclZip created archive. It is also unable to
add a file in a PclZip created archive. (Corrected in v.1.2)
In Version 1.0.1 :
- Adding a complete tree of folder may result in a bad archive
creation. (Corrected in V.1.1).
- Path given to methods must be in the unix format (/) and not the Windows format (\).
Workaround : Use only / directory separators.
- PclZip is using temporary files that are sometime the name of the file with a .tmp or .gz
added suffix. Files with these names may already exist and may be overwritten.
Workaround : none.
- PclZip does not check if the zlib extension is present. If it is absent, the zip
file is not created and the lib abort without warning.
Workaround : enable the zlib extension on the php install
In Version 1.0 :
- Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
(Corrected in v.1.0.1)
- Limitation : Multi-disk zip archive are not supported.
5 - License
===========
Since version 1.1.2, PclZip Library is released under GNU/LGPL license.
This library is free, so you can use it at no cost.
HOWEVER, if you release a script, an application, a library or any kind of
code using PclZip library (or a part of it), YOU MUST :
- Indicate in the documentation (or a readme file), that your work
uses PclZip Library, and make a reference to the author and the web site
http://www.phpconcept.net
- Gives the ability to the final user to update the PclZip libary.
I will also appreciate that you send me a mail (vincent@phpconcept.net), just to
be aware that someone is using PclZip.
For more information about GNU/LGPL license : http://www.gnu.org
6 - Warning
=================
This library and the associated files are non commercial, non professional work.
It should not have unexpected results. However if any damage is caused by this software
the author can not be responsible.
The use of this software is at the risk of the user.
7 - Documentation
=================
PclZip User Manuel is available in English on PhpConcept : http://www.phpconcept.net/pclzip/man/en/index.php
A Russian translation was done by Feskov Kuzma : http://php.russofile.ru/ru/authors/unsort/zip/
8 - Author
==========
This software was written by Vincent Blavet (vincent@phpconcept.net) on its leasure time.
9 - Contribute
==============
If you want to contribute to the development of PclZip, please contact vincent@phpconcept.net.
If you can help in financing PhpConcept hosting service, please go to
http://www.phpconcept.net/soutien.php

File diff suppressed because it is too large Load Diff

View File

@@ -1,218 +1,218 @@
/*******************************************************************
* The http://phpmailer.codeworxtech.com/ website now carries a few *
* advertisements through the Google Adsense network. Please visit *
* the advertiser sites and help us offset some of our costs. *
* Thanks .... *
********************************************************************/
PHPMailer
Full Featured Email Transfer Class for PHP
==========================================
Version 5.0.0 (April 02, 2009)
With the release of this version, we are initiating a new version numbering
system to differentiate from the PHP4 version of PHPMailer.
Most notable in this release is fully object oriented code.
We now have available the PHPDocumentor (phpdocs) documentation. This is
separate from the regular download to keep file sizes down. Please see the
download area of http://phpmailer.codeworxtech.com.
We also have created a new test script (see /test_script) that you can use
right out of the box. Copy the /test_script folder directly to your server (in
the same structure ... with class.phpmailer.php and class.smtp.php in the
folder above it. Then launch the test script with:
http://www.yourdomain.com/phpmailer/test_script/index.php
from this one script, you can test your server settings for mail(), sendmail (or
qmail), and SMTP. This will email you a sample email (using contents.html for
the email body) and two attachments. One of the attachments is used as an inline
image to demonstrate how PHPMailer will automatically detect if attachments are
the same source as inline graphics and only include one version. Once you click
the Submit button, the results will be displayed including any SMTP debug
information and send status. We will also display a version of the script that
you can cut and paste to include in your projects. Enjoy!
Version 2.3 (November 08, 2008)
We have removed the /phpdoc from the downloads. All documentation is now on
the http://phpmailer.codeworxtech.com website.
The phpunit.php has been updated to support PHP5.
For all other changes and notes, please see the changelog.
Donations are accepted at PayPal with our id "paypal@worxteam.com".
Version 2.2 (July 15 2008)
- see the changelog.
Version 2.1 (June 04 2008)
With this release, we are announcing that the development of PHPMailer for PHP5
will be our focus from this date on. We have implemented all the enhancements
and fixes from the latest release of PHPMailer for PHP4.
Far more important, though, is that this release of PHPMailer (v2.1) is
fully tested with E_STRICT error checking enabled.
** NOTE: WE HAVE A NEW LANGUAGE VARIABLE FOR DIGITALLY SIGNED S/MIME EMAILS.
IF YOU CAN HELP WITH LANGUAGES OTHER THAN ENGLISH AND SPANISH, IT WOULD BE
APPRECIATED.
We have now added S/MIME functionality (ability to digitally sign emails).
BIG THANKS TO "sergiocambra" for posting this patch back in November 2007.
The "Signed Emails" functionality adds the Sign method to pass the private key
filename and the password to read it, and then email will be sent with
content-type multipart/signed and with the digital signature attached.
A quick note on E_STRICT:
- In about half the test environments the development version was subjected
to, an error was thrown for the date() functions (used at line 1565 and 1569).
This is NOT a PHPMailer error, it is the result of an incorrectly configured
PHP5 installation. The fix is to modify your 'php.ini' file and include the
date.timezone = America/New York
directive, (for your own server timezone)
- If you do get this error, and are unable to access your php.ini file, there is
a workaround. In your PHP script, add
date_default_timezone_set('America/Toronto');
* do NOT try to use
$myVar = date_default_timezone_get();
as a test, it will throw an error.
We have also included more example files to show the use of "sendmail", "mail()",
"smtp", and "gmail".
We are also looking for more programmers to join the volunteer development team.
If you have an interest in this, please let us know.
Enjoy!
Version 2.1.0beta1 & beta2
please note, this is BETA software
** DO NOT USE THIS IN PRODUCTION OR LIVE PROJECTS
INTENDED STRICTLY FOR TESTING
** NOTE:
As of November 2007, PHPMailer has a new project team headed by industry
veteran Andy Prevost (codeworxtech). The first release in more than two
years will focus on fixes, adding ease-of-use enhancements, provide
basic compatibility with PHP4 and PHP5 using PHP5 backwards compatibility
features. A new release is planned before year-end 2007 that will provide
full compatiblity with PHP4 and PHP5, as well as more bug fixes.
We are looking for project developers to assist in restoring PHPMailer to
its leadership position. Our goals are to simplify use of PHPMailer, provide
good documentation and examples, and retain backward compatibility to level
1.7.3 standards.
If you are interested in helping out, visit http://sourceforge.net/projects/phpmailer
and indicate your interest.
**
http://phpmailer.sourceforge.net/
This software is licenced under the LGPL. Please read LICENSE for information on the
software availability and distribution.
Class Features:
- Send emails with multiple TOs, CCs, BCCs and REPLY-TOs
- Redundant SMTP servers
- Multipart/alternative emails for mail clients that do not read HTML email
- Support for 8bit, base64, binary, and quoted-printable encoding
- Uses the same methods as the very popular AspEmail active server (COM) component
- SMTP authentication
- Native language support
- Word wrap, and more!
Why you might need it:
Many PHP developers utilize email in their code. The only PHP function
that supports this is the mail() function. However, it does not expose
any of the popular features that many email clients use nowadays like
HTML-based emails and attachments. There are two proprietary
development tools out there that have all the functionality built into
easy to use classes: AspEmail(tm) and AspMail. Both of these
programs are COM components only available on Windows. They are also a
little pricey for smaller projects.
Since I do Linux development I<>ve missed these tools for my PHP coding.
So I built a version myself that implements the same methods (object
calls) that the Windows-based components do. It is open source and the
LGPL license allows you to place the class in your proprietary PHP
projects.
Installation:
Copy class.phpmailer.php into your php.ini include_path. If you are
using the SMTP mailer then place class.smtp.php in your path as well.
In the language directory you will find several files like
phpmailer.lang-en.php. If you look right before the .php extension
that there are two letters. These represent the language type of the
translation file. For instance "en" is the English file and "br" is
the Portuguese file. Chose the file that best fits with your language
and place it in the PHP include path. If your language is English
then you have nothing more to do. If it is a different language then
you must point PHPMailer to the correct translation. To do this, call
the PHPMailer SetLanguage method like so:
// To load the Portuguese version
$mail->SetLanguage("br", "/optional/path/to/language/directory/");
That's it. You should now be ready to use PHPMailer!
A Simple Example:
<?php
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "smtp1.example.com;smtp2.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "jswan"; // SMTP username
$mail->Password = "secret"; // SMTP password
$mail->From = "from@example.com";
$mail->FromName = "Mailer";
$mail->AddAddress("josh@example.net", "Josh Adams");
$mail->AddAddress("ellen@example.com"); // name is optional
$mail->AddReplyTo("info@example.com", "Information");
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments
$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name
$mail->IsHTML(true); // set email format to HTML
$mail->Subject = "Here is the subject";
$mail->Body = "This is the HTML message body <b>in bold!</b>";
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
?>
CHANGELOG
See ChangeLog.txt
Download: http://sourceforge.net/project/showfiles.php?group_id=26031
Andy Prevost
/*******************************************************************
* The http://phpmailer.codeworxtech.com/ website now carries a few *
* advertisements through the Google Adsense network. Please visit *
* the advertiser sites and help us offset some of our costs. *
* Thanks .... *
********************************************************************/
PHPMailer
Full Featured Email Transfer Class for PHP
==========================================
Version 5.0.0 (April 02, 2009)
With the release of this version, we are initiating a new version numbering
system to differentiate from the PHP4 version of PHPMailer.
Most notable in this release is fully object oriented code.
We now have available the PHPDocumentor (phpdocs) documentation. This is
separate from the regular download to keep file sizes down. Please see the
download area of http://phpmailer.codeworxtech.com.
We also have created a new test script (see /test_script) that you can use
right out of the box. Copy the /test_script folder directly to your server (in
the same structure ... with class.phpmailer.php and class.smtp.php in the
folder above it. Then launch the test script with:
http://www.yourdomain.com/phpmailer/test_script/index.php
from this one script, you can test your server settings for mail(), sendmail (or
qmail), and SMTP. This will email you a sample email (using contents.html for
the email body) and two attachments. One of the attachments is used as an inline
image to demonstrate how PHPMailer will automatically detect if attachments are
the same source as inline graphics and only include one version. Once you click
the Submit button, the results will be displayed including any SMTP debug
information and send status. We will also display a version of the script that
you can cut and paste to include in your projects. Enjoy!
Version 2.3 (November 08, 2008)
We have removed the /phpdoc from the downloads. All documentation is now on
the http://phpmailer.codeworxtech.com website.
The phpunit.php has been updated to support PHP5.
For all other changes and notes, please see the changelog.
Donations are accepted at PayPal with our id "paypal@worxteam.com".
Version 2.2 (July 15 2008)
- see the changelog.
Version 2.1 (June 04 2008)
With this release, we are announcing that the development of PHPMailer for PHP5
will be our focus from this date on. We have implemented all the enhancements
and fixes from the latest release of PHPMailer for PHP4.
Far more important, though, is that this release of PHPMailer (v2.1) is
fully tested with E_STRICT error checking enabled.
** NOTE: WE HAVE A NEW LANGUAGE VARIABLE FOR DIGITALLY SIGNED S/MIME EMAILS.
IF YOU CAN HELP WITH LANGUAGES OTHER THAN ENGLISH AND SPANISH, IT WOULD BE
APPRECIATED.
We have now added S/MIME functionality (ability to digitally sign emails).
BIG THANKS TO "sergiocambra" for posting this patch back in November 2007.
The "Signed Emails" functionality adds the Sign method to pass the private key
filename and the password to read it, and then email will be sent with
content-type multipart/signed and with the digital signature attached.
A quick note on E_STRICT:
- In about half the test environments the development version was subjected
to, an error was thrown for the date() functions (used at line 1565 and 1569).
This is NOT a PHPMailer error, it is the result of an incorrectly configured
PHP5 installation. The fix is to modify your 'php.ini' file and include the
date.timezone = America/New York
directive, (for your own server timezone)
- If you do get this error, and are unable to access your php.ini file, there is
a workaround. In your PHP script, add
date_default_timezone_set('America/Toronto');
* do NOT try to use
$myVar = date_default_timezone_get();
as a test, it will throw an error.
We have also included more example files to show the use of "sendmail", "mail()",
"smtp", and "gmail".
We are also looking for more programmers to join the volunteer development team.
If you have an interest in this, please let us know.
Enjoy!
Version 2.1.0beta1 & beta2
please note, this is BETA software
** DO NOT USE THIS IN PRODUCTION OR LIVE PROJECTS
INTENDED STRICTLY FOR TESTING
** NOTE:
As of November 2007, PHPMailer has a new project team headed by industry
veteran Andy Prevost (codeworxtech). The first release in more than two
years will focus on fixes, adding ease-of-use enhancements, provide
basic compatibility with PHP4 and PHP5 using PHP5 backwards compatibility
features. A new release is planned before year-end 2007 that will provide
full compatiblity with PHP4 and PHP5, as well as more bug fixes.
We are looking for project developers to assist in restoring PHPMailer to
its leadership position. Our goals are to simplify use of PHPMailer, provide
good documentation and examples, and retain backward compatibility to level
1.7.3 standards.
If you are interested in helping out, visit http://sourceforge.net/projects/phpmailer
and indicate your interest.
**
http://phpmailer.sourceforge.net/
This software is licenced under the LGPL. Please read LICENSE for information on the
software availability and distribution.
Class Features:
- Send emails with multiple TOs, CCs, BCCs and REPLY-TOs
- Redundant SMTP servers
- Multipart/alternative emails for mail clients that do not read HTML email
- Support for 8bit, base64, binary, and quoted-printable encoding
- Uses the same methods as the very popular AspEmail active server (COM) component
- SMTP authentication
- Native language support
- Word wrap, and more!
Why you might need it:
Many PHP developers utilize email in their code. The only PHP function
that supports this is the mail() function. However, it does not expose
any of the popular features that many email clients use nowadays like
HTML-based emails and attachments. There are two proprietary
development tools out there that have all the functionality built into
easy to use classes: AspEmail(tm) and AspMail. Both of these
programs are COM components only available on Windows. They are also a
little pricey for smaller projects.
Since I do Linux development I<>ve missed these tools for my PHP coding.
So I built a version myself that implements the same methods (object
calls) that the Windows-based components do. It is open source and the
LGPL license allows you to place the class in your proprietary PHP
projects.
Installation:
Copy class.phpmailer.php into your php.ini include_path. If you are
using the SMTP mailer then place class.smtp.php in your path as well.
In the language directory you will find several files like
phpmailer.lang-en.php. If you look right before the .php extension
that there are two letters. These represent the language type of the
translation file. For instance "en" is the English file and "br" is
the Portuguese file. Chose the file that best fits with your language
and place it in the PHP include path. If your language is English
then you have nothing more to do. If it is a different language then
you must point PHPMailer to the correct translation. To do this, call
the PHPMailer SetLanguage method like so:
// To load the Portuguese version
$mail->SetLanguage("br", "/optional/path/to/language/directory/");
That's it. You should now be ready to use PHPMailer!
A Simple Example:
<?php
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "smtp1.example.com;smtp2.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "jswan"; // SMTP username
$mail->Password = "secret"; // SMTP password
$mail->From = "from@example.com";
$mail->FromName = "Mailer";
$mail->AddAddress("josh@example.net", "Josh Adams");
$mail->AddAddress("ellen@example.com"); // name is optional
$mail->AddReplyTo("info@example.com", "Information");
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments
$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name
$mail->IsHTML(true); // set email format to HTML
$mail->Subject = "Here is the subject";
$mail->Body = "This is the HTML message body <b>in bold!</b>";
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
?>
CHANGELOG
See ChangeLog.txt
Download: http://sourceforge.net/project/showfiles.php?group_id=26031
Andy Prevost

View File

@@ -1,194 +1,194 @@
<?php
/**
* The zfile library of zentaopms.
*
* @copyright Copyright 2009-2013 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package Zfile
* @version $Id: zfile.class.php 2605 2013-01-09 07:22:58Z wwccss $
* @link http://www.zentao.net
*/
class zfile
{
/**
* Copy a directory from an directory to another directory.
*
* @param string $from
* @param string $to
* @access public
* @return array copied files.
*/
public function copyDir($from, $to)
{
static $copiedFiles = array();
if(!is_dir($from) or !is_readable($from)) return $copiedFiles;
if(!is_dir($to))
{
if(!is_writable(dirname($to))) return $copiedFiles;
mkdir($to);
}
$from = realpath($from) . '/';
$to = realpath($to) . '/';
$entries = scandir($from);
foreach($entries as $entry)
{
if($entry == '.' or $entry == '..' or $entry == '.svn') continue;
$fullEntry = $from . $entry;
if(is_file($fullEntry))
{
if(file_exists($to . $entry))
{
unlink($to . $entry);
}
copy($fullEntry, $to . $entry);
$copiedFiles[] = $to . $entry;
}
else
{
$nextFrom = $from . $entry;
$nextTo = $to . $entry;
$this->copyDir($nextFrom, $nextTo);
}
}
return $copiedFiles;
}
/**
* Remove a dir.
*
* @param string $dir
* @access public
* @return bool
*/
public function removeDir($dir)
{
$dir = realpath($dir) . '/';
if($dir == '/') return false;
if(!is_writable($dir)) return false;
if(!is_dir($dir)) return true;
$entries = scandir($dir);
foreach($entries as $entry)
{
if($entry == '.' or $entry == '..' or $entry == '.svn') continue;
$fullEntry = $dir . $entry;
if(is_file($fullEntry))
{
unlink($fullEntry);
}
else
{
$this->removeDir($fullEntry);
}
}
if(!@rmdir($dir)) return false;
return true;
}
/**
* Get files under a directory recursive.
*
* @param string $dir
* @param array $exceptions
* @access private
* @return array
*/
public function readDir($dir, $exceptions = array())
{
static $files = array();
if(!is_dir($dir)) return $files;
$dir = realpath($dir) . '/';
$entries = scandir($dir);
foreach($entries as $entry)
{
if($entry == '.' or $entry == '..' or $entry == '.svn') continue;
if(in_array($entry, $exceptions)) continue;
$fullEntry = $dir . $entry;
if(is_file($fullEntry))
{
$files[] = $dir . $entry;
}
else
{
$nextDir = $dir . $entry;
$this->readDir($nextDir);
}
}
return $files;
}
/**
* Make a dir.
*
* @param string $dir
* @access public
* @return bool
*/
public function mkdir($dir)
{
return mkdir($dir, 0755, true);
}
/**
* Remove a file
*
* @param string $file
* @access public
* @return bool
*/
public function removeFile($file)
{
if(!file_exists($file)) return true;
return @unlink($file);
}
/**
* Batch remove files. use glob function.
*
* @param string $patern
* @access public
* @return avoid
*/
public function batchRemoveFile($patern)
{
$files = glob($patern);
foreach($files as $file) @unlink($file);
}
/**
* Remove a file
*
* @param string from
* @param string to
* @access public
* @return bool
*/
public function copyFile($from, $to)
{
return @copy($from, $to);
}
/**
* Rename a file or directory.
*
* @param string from
* @param string to
* @access public
* @return bool
*/
public function rename($from, $to)
{
return rename($from, $to);
}
}
<?php
/**
* The zfile library of zentaopms.
*
* @copyright Copyright 2009-2013 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package Zfile
* @version $Id: zfile.class.php 2605 2013-01-09 07:22:58Z wwccss $
* @link http://www.zentao.net
*/
class zfile
{
/**
* Copy a directory from an directory to another directory.
*
* @param string $from
* @param string $to
* @access public
* @return array copied files.
*/
public function copyDir($from, $to)
{
static $copiedFiles = array();
if(!is_dir($from) or !is_readable($from)) return $copiedFiles;
if(!is_dir($to))
{
if(!is_writable(dirname($to))) return $copiedFiles;
mkdir($to);
}
$from = realpath($from) . '/';
$to = realpath($to) . '/';
$entries = scandir($from);
foreach($entries as $entry)
{
if($entry == '.' or $entry == '..' or $entry == '.svn') continue;
$fullEntry = $from . $entry;
if(is_file($fullEntry))
{
if(file_exists($to . $entry))
{
unlink($to . $entry);
}
copy($fullEntry, $to . $entry);
$copiedFiles[] = $to . $entry;
}
else
{
$nextFrom = $from . $entry;
$nextTo = $to . $entry;
$this->copyDir($nextFrom, $nextTo);
}
}
return $copiedFiles;
}
/**
* Remove a dir.
*
* @param string $dir
* @access public
* @return bool
*/
public function removeDir($dir)
{
$dir = realpath($dir) . '/';
if($dir == '/') return false;
if(!is_writable($dir)) return false;
if(!is_dir($dir)) return true;
$entries = scandir($dir);
foreach($entries as $entry)
{
if($entry == '.' or $entry == '..' or $entry == '.svn') continue;
$fullEntry = $dir . $entry;
if(is_file($fullEntry))
{
unlink($fullEntry);
}
else
{
$this->removeDir($fullEntry);
}
}
if(!@rmdir($dir)) return false;
return true;
}
/**
* Get files under a directory recursive.
*
* @param string $dir
* @param array $exceptions
* @access private
* @return array
*/
public function readDir($dir, $exceptions = array())
{
static $files = array();
if(!is_dir($dir)) return $files;
$dir = realpath($dir) . '/';
$entries = scandir($dir);
foreach($entries as $entry)
{
if($entry == '.' or $entry == '..' or $entry == '.svn') continue;
if(in_array($entry, $exceptions)) continue;
$fullEntry = $dir . $entry;
if(is_file($fullEntry))
{
$files[] = $dir . $entry;
}
else
{
$nextDir = $dir . $entry;
$this->readDir($nextDir);
}
}
return $files;
}
/**
* Make a dir.
*
* @param string $dir
* @access public
* @return bool
*/
public function mkdir($dir)
{
return mkdir($dir, 0755, true);
}
/**
* Remove a file
*
* @param string $file
* @access public
* @return bool
*/
public function removeFile($file)
{
if(!file_exists($file)) return true;
return @unlink($file);
}
/**
* Batch remove files. use glob function.
*
* @param string $patern
* @access public
* @return avoid
*/
public function batchRemoveFile($patern)
{
$files = glob($patern);
foreach($files as $file) @unlink($file);
}
/**
* Remove a file
*
* @param string from
* @param string to
* @access public
* @return bool
*/
public function copyFile($from, $to)
{
return @copy($from, $to);
}
/**
* Rename a file or directory.
*
* @param string from
* @param string to
* @access public
* @return bool
*/
public function rename($from, $to)
{
return rename($from, $to);
}
}