作者归档:superaj

Windows 下制作免安装的 MySQL 简化版

1、首先下载免安装包 mysql-noinstall-5.1.54-win32.zip(其它版本类似)
2、复制 bin 、data 和 share 三个目录和 my-medium.ini 文件到 d:\tools\mysql 目录
修改 my-medium.ini 的名称为 my.ini
保留 bin 目录下的 mysqld.exe 文件,mysqladmin.exe 和 mysql.exe 建议也保留,其它文件是否保留视情况而定
data 和 share 两个目录不需要修改
【注】如果使用 innodb_plugin 功能,还需要复制 lib\plugin\ha_innodb_plugin.dll 文件(保持目录结构)
3、修改配置文件 my.ini 指定基本目录和数据目录
basedir=”d:\tools\mysql ”
datadir=”d:\tools\mysql \data\”
如果使用 innodb_plugin 功能,修改配置文件 my.ini 增加如下配置
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.dll
innodb_file_format=barracuda
innodb_strict_mode=1
4、安装 MySQL 服务器,将其注册为 Windows 服务
命令行切换到 d:\tools\mysql\bin 目录
执行安装的命令
mysqld.exe –install MySQL5 –defaults-file=”d:/tools/mysql/my.ini”
执行卸载的命令
mysqld –remove MySQL5

PHP读取 excel(.csv, .xls)文件的方法

常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点。个人推荐用第三种方法,因为它可以跨平台使用。

1. 以.csv格式读取

将.xls转换成.csv的文本格式,然后再用PHP分析这个文件,和PHP分析文本没有什么区别。

优点:跨平台,效率比较高、可以读写。

缺点:只能直接使用.csv的文件,如果经常接受.xls二进制文件的话需要手工转换,不能自动化。一个文件只有一个SHEET。

PHP有自带的分析.csv函数:fgetcsv

array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )

handle 一个由 fopen()、popen() 或 fsockopen() 产生的有效文件指针。

length (可选)必须大于 CVS 文件内最长的一行。在 PHP 5 中该参数是可选的。如果忽略(在 PHP 5.0.4 以后的版本中设为 0)该参数的话,那么长度就没有限制,不过可能会影响执行效率。

delimiter (可选)设置字段分界符(只允许一个字符),默认值为逗号。

enclosure (可选)设置字段环绕符(只允许一个字符),默认值为双引号。该参数是在 PHP 4.3.0 中添加的。 和 fgets() 类似,只除了 fgetcsv() 解析读入的行并找出 CSV 格式的字段然后返回一个包含这些字段的数组。

fgetcsv() 出错时返回 FALSE,包括碰到文件结束时。

注意: CSV 文件中的空行将被返回为一个包含有单个 null 字段的数组,不会被当成错误。

当然也可以自己手动分析字符串。

<?php$row = 1;$handle = fopen("test.csv","r");while ($data = fgetcsv($handle, 1000, ",")) { $num = count($data); echo " $num fields in line $row:\n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "\n"; }}fclose($handle);?>

 

还可以利用fputcsv函数将行格式化为 CSV 并写入文件指针。

2. ODBC链接数据源

优点:支持多种格式,cvs, xls等。支持读写,使用标准SQL语言,和SQLSERVER、MYSQL数据库几乎完全一样。

缺点:值支持windows服务器

3. PHP自定义类

优点:跨平台。某些类支持写操作。支持.xls二进制文件

常用的类有phpExcelReader、PHPExcel。其中后者支持读写,但是需要php5.2以上版本。

phpExcelReader是专门用来读取文件的。返回一个数组,包含表格的所有内容。

该 class 使用的方法可以参考网站下载回来的压缩档中的 example.php。

不过我下载回来的 (版本 2009-03-30),有两点要注意:

reader.php 中的下面这行要修改

将 require_once ‘Spreadsheet/Excel/Reader/OLERead.php’;

改为 require_once ‘oleread.inc’;

example.php 中

修改 $data->setOutputEncoding(’CP1251′);

为 $data->setOutputEncoding(’CP936′);

修改 nl2br(htmlentities($data->sheets[$sheet][‘cells’][$row][$col]));

为 $table_output[$sheet] .= nl2br(htmlspecialchars($data->sheets[$sheet][‘cells’][$row][$col]));

不然中文会有问题。

繁体的话可以修改为CP950、日文是CP932,具体可参考codepage说明。

修改 $data->read(’jxlrwtest.xls’) 为自己的 excel 文件名,zip 档中附的 jxlrwtest.xls 应该是坏了。

这是下载地址:

phpExcelReader:http://sourceforge.net/projects/phpexcelreader/

PHPExcel:http://www.codeplex.com/PHPExcel/Wiki/View.aspx?title=Documents&referringTitle=Home

 

 

有时写程序时后台要求把大量数据导入数据库中,比如计算机考试成绩的查询、电话簿的数据等一般都是存放在excel中的,这时我们可把数据导出成csv文 件,然后通过以下程序即可在后台批量导入数据到数据库中。

  下面只是主要程序部分:

<?php

//定义获取时间函数
function getmicrotime(){
   list($usec, $sec) = explode(" ",microtime());
   return ((float)$usec + (float)$sec);
}
?>

<?php
$time_start = getmicrotime();
include("db.inc.php");//连接数据库
$db=new testcsv;
?>
<?php
$handle = fopen ("test.csv","r");
$sql="insert into scores(idcard,names,num,sex,nation,score) values(";
while ($data = fgetcsv ($handle, 1000, ",")) {
  $num = count ($data);
  for ($c=0; $c < $num; $c++) {
      if($c==$num-1){$sql=$sql.$data[$c].")";break;}
      $sql=$sql.$data[$c].",";
  }
print "<br>";
echo $sql."<br>";
$db->query($sql);
echo "sql语句执行成功!<br>";
$sql="insert into scores(idcard,names,num,sex,nation,score) values(";
}
fclose ($handle);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo "程序执行时间:".$time."秒";
?>

 

PHP去空格方法大全

去掉字符串中的空格 str_replace(‘ ‘,”,$cat_name)
$str = ” This line contains\tliberal \r\n use of?? whitespace.\n\n”;
$str = trim($str);// 首先去掉头尾空格
$str = preg_replace(’/\s(?=\s)/’, ‘’, $str);// 接着去掉两个空格以上的
$str = preg_replace(’/[\n\r\t]/’, ‘ ‘, $str);// 最后将非空格替换为一个空格
使用上面的例子可以去掉所有多余的空格。
首先使用TRim()去头尾空格,
接着用preg_replace()去掉重复的空格。
当中的(?=)表示只匹配后面的空格跟随前面的空格的空格。

<?php
$str1="?? tt 七夕快乐!nr"; //这里定义一个字符变量,其中包括"空格","t", 水平制表符,"n",换行符
//这里主要调用trim()函数去除空格等,trim()函数用于去除字符中的""空格,"t"水平制表符"n"换行符,"r"回车符
//"\0"字符串结束符,"xOB"垂直制表符。如果想通过此函数过滤掉特殊的字符,可以制定第二个参数。
echo trim($str1)."<br>";
//这里是去除$str1变量中带有tt的字符
echo trim($str1," tt")."<br>";
//定义变量$str2其中包括"."和空格
$str2="... 情人节快乐!...?? 中国...";
//调用trim()函数去除$str2变量中的空格
echo trim($str2)."<br>";
//ltrim()函数用于去除字符串左边的空格或指定字符串,其默认的字符同trim一样。因为这里指定了第二个参数,
//所以只去除$str2变量中左边的"."
echo ltrim($str2,".")."<br>";
//ltrim()函数用于去除字符串(右)边的空格或指定字符串,其默认的字符同trim一样。因为这里指定了第二个参数,
//所以只去除$str2变量中左边的"."
echo rtrim($str2,".")."<br>";
?>
<?php
echo substr("today is father day!",0)."<br>";
echo substr("today is father day!",6,2)."<br>";//这里只截取字符串中第6字符开始截取,并只截取2个字符
echo substr("today is father day!",-5,5)."<br>";//这里从字符串的倒数第5个字符开始截取,截取5个字符
echo substr("today is father day!",0,-5)."<br>";//这里只截取字符串中的首个字符开始截取,截取到字符串的倒数第5个
echo substr("today is father day!",-5,-1)."<br>";//这里从字符串的倒数第5个字符开始截取,截取倒数第一个字符
?>

 

PHP彩蛋入侵

关于“PHP彩蛋”的说法也许很多老PHPer已经都知道或听说了,好像是早在PHP4版本的时候就有彩蛋了,挺好玩儿的,可能近年来逐渐被人们遗忘了,其实彩蛋功能在PHP脚本引擎默认情况下是开启。
下面就用Discuz官方论坛做一下测试:
http://www.discuz.net/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
http://www.discuz.net/?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
http://www.discuz.net/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
http://www.discuz.net/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
如上4个链接加红色的部分是PHP源码/ext/standard/info.h中定义的GUID值,如下图所示
关于PHP彩蛋这个玩法已经被国外的某些Web漏洞扫描器(例如:HP WebInspect)所使用了,用其来探测被扫描的网站使用的是何种Web开发语言。其实在渗透测试过程中经常遇见某些网站难以辨别出使用了何种Web开发语言,因为有些网站采用动态脚本生成纯静态HTML页或者是采用URL重写实现伪静态页面,如果网站使用的是PHP开发的话,可以尝试使用彩蛋的探测法,在很多情况下可以一针见血的鉴定出来,因为默认情况下彩蛋的功能在php.ini中是开启的,当然如果不想让别人通过彩蛋的方式来获取网站的敏感信息的话,那就在php.ini中将expose_php = Off即可!
看完上面这些可能有些人会说既然php.ini中的expose_php = On,那么直接抓包看看http头信息不就OK了,可是某些大站点Web服务器的前面都是有反向代理服务器的,所以还不能完全依赖于捕获http头中的信息。

mysql密码找回

1、cmd进入命令行,切换到mysql的安装目录(本机mysql安装路径D:\MySQL)

C:\Documents and Settings\Administrator>d:
D:\>cd D:\MySQL\MySQL Server 5.0\bin
D:\MySQL\MySQL Server 5.0\bin>dir
 驱动器 D 中的卷是 新加卷
 卷的序列号是 923D-971E
 D:\MySQL\MySQL Server 5.0\bin 的目录
2010-01-12  15:44    <DIR>          .
2010-01-12  15:44    <DIR>          ..
2006-05-26  04:50         1,196,032 comp-err.exe
2006-05-26  04:50         1,470,464 libmySQL.dll
2006-05-26  04:50         1,433,600 myisamchk.exe
2006-05-26  04:50         1,339,392 myisamlog.exe
2006-05-26  04:50         1,351,680 myisampack.exe
2006-05-26  04:50         1,314,816 myisam_ftdump.exe
2006-05-26  04:50         1,572,864 mysql.exe
2006-05-26  04:50         1,437,696 mysqladmin.exe
2006-05-26  04:50         1,454,080 mysqlbinlog.exe
2006-05-26  04:50         1,425,408 mysqlcheck.exe
2006-05-26  04:50         6,680,576 mysqld-debug.exe
2006-05-26  04:50         4,648,960 mysqld-max-nt.exe
2006-05-26  04:50         4,644,864 mysqld-max.exe
2006-05-26  04:50         4,149,248 mysqld-nt.exe
2006-05-26  04:50         4,149,248 mysqld.exe
2006-05-26  04:50         1,466,368 mysqldump.exe
2006-05-26  04:50         1,429,504 mysqlimport.exe
2006-04-19  04:41         1,561,600 MySQLInstanceConfig.exe
2006-05-26  04:50         1,470,464 mysqlmanager.exe
2006-05-26  04:50         1,429,504 mysqlshow.exe
2006-05-26  04:50         1,527,808 mysqltest.exe
2006-05-26  04:50         1,761,280 mysql_client_test.exe
2006-05-26  04:50         1,191,936 my_print_defaults.exe
2006-05-26  04:50         1,171,456 perror.exe
2006-05-26  04:50         1,187,840 replace.exe
              25 个文件     52,466,688 字节
               2 个目录 23,282,192,384 可用字节
D:\MySQL\MySQL Server 5.0\bin>mysqld-nt –skip-grant-tables
2、cmd打开另一个命令行窗口
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>mysql -uroot -p
Enter password:(这里提示输入密码直接回车即可)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 5.0.22-community-nt
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> update mysql.user set password=password(‘admin’) where user=’root’;(修改root用户密码)
Query OK, 2 rows affected (0.09 sec)
Rows matched: 2  Changed: 2  Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.16 sec)
mysql> exit;
Bye
win7/win8使用管理员权限运行  kill mysqld进程

C:\Documents and Settings\Administrator>net start mysql
MySQL 服务已经启动成功。
C:\Documents and Settings\Administrator>net stop mysql
没有启动 MySQL 服务。
请键入 NET HELPMSG 3521 以获得更多的帮助。
C:\Documents and Settings\Administrator>net helpmsg 3521
没有启动 *** 服务。
C:\Documents and Settings\Administrator>net start mysql
MySQL 服务已经启动成功。

验证win7 win8是否激活的方法

方法一.直接打开WIN7 Activation点击”点击验证”(推荐);
方法二.在”运行”里输入 slmgr.vbs -dli 并回车;
方法二.在”运行”里输入 slmgr.vbs -xpr 并回车;
方法二.在”运行”里输入 winver 并回车;
方法四.在”运行”里输入 slmgr.vbs -dlv 并回车;
方法五.右键我的电脑属性 查看是否处于激活状态.

完美去掉Discuz x1.5中powered by discuz!

标题中的版权

在原来的discuz X1版本中,标题中去掉“Powered by Discuz!”版权标识很容易,只需要修改模板文件的头部公用文件,将[‘bbname’] – <!–{/if}–> Powered by Discuz!</title> 中红色部分去掉即可。
但是discuz X1.5直接把- Powered by Discuz!中的 – 放在了变量里,所以删除后,标题一句话结束后会有一个小 – 尾巴,对搜索引擎很不友好,所以也有一个好的办法完美解决,即:

打开\template\default\common\header_common.htm文件,找到<title><!–{if !empty($navtitle)}–>$navtitle – <!–{/if}–><!–{if empty
($nobbname)}–> $_G[‘setting’][‘bbname’] – <!–{/if}–> Powered by Discuz!</title>

将其中的“Powered By Discuz!”字串改为“{lang secondtitle}”。
再打开source/language/lang_template.php。在变量的最后,也就是整个数组的目录后按以前的格式,加上引号内的内容”  ‘secondtitle’ => ‘网站或论坛名称’,“。
更新缓存即可。
页底导航中的版权
打开\template\default\common\foot.htm文件
找到 <p>Powered by <strong><a href=”http://www.discuz.net” target=”_blank”>Discuz!</a></strong> <em>$_G[‘setting’][‘version’]</em><!–{if !empty($_G[‘setting’][‘boardlicensed’])}–> <a href=”http://license.comsenz.com/?pid=1&host=$_SERVER[HTTP_HOST]” target=”_blank”>Licensed</a><!–{/if}–></p><p>&copy; 2001-2010 <a href=”http://www.comsenz.com” target=”_blank”>Comsenz Inc.</a></p>
全部删除即可。
或者添加自己的代码如:
<p>24小时服务热线:0000-00000000</p>
   <p>Copyright &copy; 2011 ***.com Inc. All Rights Reserved. <a href=”http://www.***.com/” target=”_blank”>**公司</a> 版权所有</p>
  </div>

关于apache的域名重定向

同志们以后有可能用到域名301重定向,这个是apache的一般配置

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^coolaj.cn$
RewriteRule ^(.*)$ http://www.coolaj.cn$1 [R=301,L]
</IfModule>

这个的意思是吧所有coolaj.cn的请求 301重定向到www.coolaj.cn

这个的前提是apache要开启mod_rewrite(apache的一个模块,是一个严格的Apache配置文件)
详情查看百度百科:http://baike.baidu.com/view/5016366.html?wtp=tt

MySQL复制表结构和内容到另一张表中的SQL

1.复制表结构及数据到新表

CREATE TABLE 新表
SELECT * FROM 旧表

2.只复制表结构到新表

CREATE TABLE 新表
SELECT * FROM 旧表 WHERE 1=2
即:让WHERE条件不成立.
方法二:(低版本的mysql不支持,mysql4.0.25 不支持,mysql5已经支持了)
CREATE TABLE 新表
LIKE 旧表

3.复制旧表的数据到新表(假设两个表结构一样)

INSERT INTO 新表
SELECT * FROM 旧表

4.复制旧表的数据到新表(假设两个表结构不一样)

INSERT INTO 新表(字段1,字段2,…….)
SELECT 字段1,字段2,…… FROM 旧表