快速实现Magento多语言的设置和产品数据的多语言方法-线下安装

MagenTo默认支持多语言网店,不过要使用多语言功能,需要进行一些设置。

一、后台多语言支持(中文化)

Magento登录后台时默认的是显示的是英文界面,在页面左下角选择语言为中文就会跳转为中文界面,如果还是显示英文,则是因为没有下载中文语言包的原因,按以下步骤操作:

1.下载中文语言包

2.上传到指定目录

3.切换语言为简体中文,并清空缓存

 

二、前台多语言支持(多种方案)

1.下载指定语言包
2.上传到指定目录(app/local)
3.登陆管理后台 并创建一个新的store view在Manage stores页面,指定名称如“Chinese”
4.到admin panel System > Configuration > general处

然后选择 store view “Chinese” locale options > locale > Chinese
select store view “English” locale options > locales > English

保存设置。这样你就有了2种语言的界面。其实是2个store view。
最后刷新缓存,在System->Cache Management

上面介绍的方案是单网店对应多语言,如果要实现不同的域名或子目录对应不同的语言,可以添加多个Store,并指定对应的语言即可。

三、产品数据,文章页面的多语言实现

上述步骤安装完成后,仅是框架页面和导航结构实现了多语言的支持。如果是自己添加的产品分类,产品标题和内容,文章CMS页面等处要显示对应的语言内容,还需要为不同的语言/商店添加不同的语言内容,如不另外添加的话,会显示默认语言添加的内容。

如果你的网站产品内容比较多,要添加多语言的内容的工作就会比较繁琐,需要把一个产品标题或内容从原来的语言翻译成目标语言,然后再添加到指定的语言产品数据库。


关注公众号,了解更多it技术(it问答网

修改 Apache 根目录

在安装 Apache 时,会默认文件根目录为安装目录下的htdocs。可以修改 Apache 的配置文件 httpd.conf 里有关文件根目录的设置修改根目录。

修改 Apache 文件根目录的操作如下:

1. 备份 Apache 配置文件 httpd.conf,该配置文件的路径是:

%install%\conf\httpd.conf

2. 打开 http.conf 文件,找到 DocumentRoot 为开头的那一行,将DocumentRoot改成新的 DocumentRoot 路径

比如想改到 D:\website,就改成

DocumentRoot D:/website”

3. 然后找到 http.conf 文件中的如下内容

# This should be changed to whatever you set DocumentRoot to.#<Directory “C:/Program Files/Apache Software Foundation/Apache2.2/htdocs”>

将 Diectory 中的路径改成你新设的文件根目录,比如:

<Directory “D:/website”>

5. 重新启动 Apache

修改了文件根目录完成

////////////////////////////////其他虚拟目录创建

环境:appserv构架的,端口:90

测试页面:http://127.0.0.1:90

目的:将f盘下的www文件夹作为虚拟目录!

找到
C:\\AppServ\\Apache2.2\\conf 里面的httpd.conf文件,(修改前备份下)用记事本打开,找到:

Alias /icons/ “C:/AppServ/Apache2.2/icons/”

<Directory “C:/AppServ/Apache2.2/icons”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

修改如下:

Alias /icons/ “C:/AppServ/Apache2.2/icons/”
Alias /life/ “f:/www/”

<Directory “C:/AppServ/Apache2.2/icons”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<Directory “f:/www”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

重新启动Apache
测试访问:

http://127.0.0.1:90/life/页面名称

收藏于 2010-06-13


关注公众号,了解更多it技术(it问答网

PHP与MYSQL事务处理

MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。
注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
***:一般MYSQL数据库默认的引擎是MyISAM,这种引擎不支持事务!如果要让MYSQL支持事务,可以自己手动修改:
方法如下:1.修改c:\appserv\mysql\my.ini文件,找到skip-InnoDB,在前面加上#,后保存文件。
2.在运行中输入:services.msc,重启mysql服务。
3.到phpmyadmin中,mysql->show engines;(或执行mysql->show variables like ‘have_%’; ),查看InnoDB为YES,即表示数据库支持InnoDB了。
也就说明支持事务transaction了。
4.在创建表时,就可以为Storage Engine选择InnoDB引擎了。如果是以前创建的表,可以使用mysql->alter table table_name type=InnoDB;
或 mysql->alter table table_name engine=InnoDB;来改变数据表的引擎以支持事务。
*/
/*************** transaction–1 ***************/
$conn = mysql_connect(‘localhost’,’root’,’root’) or die (“数据连接错误!!!”);
mysql_select_db(‘test’,$conn);
mysql_query(“set names ‘GBK'”); //使用GBK中文编码;
//开始一个事务
mysql_query(“BEGIN”); //或者mysql_query(“START TRANSACTION”);
$sql = “INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;
$sql2 = “INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1){
mysql_query(“COMMIT”);
echo ‘提交成功。’;
}else{
mysql_query(“ROLLBACK”);
echo ‘数据回滚。’;
}
mysql_query(“END”);
/**************** transaction–2 *******************/
/*方法二*/
mysql_query(“SET AUTOCOMMIT=0”); //设置mysql不自动提交,需自行用commit语句提交
$sql = “INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;
$sql2 = “INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1){
mysql_query(“COMMIT”);
echo ‘提交成功。’;
}else{
mysql_query(“ROLLBACK”);
echo ‘数据回滚。’;
}
mysql_query(“END”); //事务处理完时别忘记mysql_query(“SET AUTOCOMMIT=1”);自动提交


/******************对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法:********************/

//MyISAM & InnoDB 都支持,
/*
LOCK TABLES可以锁定用于当前线程的表。如果表被其它线程锁定,则造成堵塞,直到可以获取所有锁定为止。
UNLOCK TABLES可以释放被当前线程保持的任何锁定。当线程发布另一个LOCK TABLES时,或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐含地解锁。
*/

mysql_query(“LOCK TABLES `user` WRITE”);//锁住`user`表
$sql = “INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;
$res = mysql_query($sql);
if($res){
echo ‘提交成功。!’;
}else{
echo ‘失败!’;
}
mysql_query(“UNLOCK TABLES”);//解除锁定

百度文献:
http://wenku.baidu.com/view/62d2b7360b4c2e3f572763c8.html

MYSQL高级特性 — 事务处理 下面以两个银行账户之间的转账为例子进行演示。 要使用MySQL中的事务处理,首先需要创建使用事务表类型(如BDB = Berkeley DB或InnoDB)的表。 CREATE TABLE account ( account_id BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, balance DOUBLE ) TYPE = InnoDB; 要在事务表上使用事务处理,必须要首先关闭自动提交: SET AUTOCOMMIT = 0; 事务处理以BEGIN命令开始: BEGIN; 现在mysql客户处在于服务器相关的事物上下文中。任何对事务表所做的改变在提交之前不会成为永久性的改变。 UPDATE ACCOUNT SET balance = 50.25 WHERE account_id = 1; UPDATE ACCOUNT SET balance = 100.25 WHERE account_id = 2; 在做出所有的改变之后,使用COMMIT命令完成事务处理: COMMIT; 当然,事务处理的真正优点是在执行第二条语句发生错误时体现出来的,若在提交前终止整个事务,可以进行回滚操作: ROLLBACK; 下面是另一个例子,通过MYSQL直接进行数学运算: SELECT @first := balance FROM account WHERE account_id = 1; SELECT @second := balance FROM account WHERE account_id = 2; UPDATE account SET balance = @first – 25.00 WHERE account_id = 1; UPDATE account SET balance = @second + 25.00 WHERE account_id = 2; 除了COMMIT命令外,下列命令也会自动结束当前事务: ALTER TABLE BEGIN CREATE INDEX DROP DATABASE DROP TABLE LOCK TABLES RENAME TABLE TRUNCATE UNLOCK TABLES 内容来自于《MySQL 权威指南(Managing & Using MySQL)》, O’Reilly & Associates, Inc. 作者George Reese等。

PHP+mysql,由于程序中需要同时像两个表中插入数据,而且不能插错,因此应该定义一个事物操作。要么两条都做,要么两条都不做。
注意:每次使用事物后,需将事物设置回自动提交!
例一:
<?php
$handler=mysql_connect(“localhost”,””,””);
mysql_select_db(“task”);
mysql_query(“SET   AUTOCOMMIT=0”);//设置为不自动提交,因为MYSQL默认立即执行
mysql_query(“BEGIN”);//开始事务定义
if(!mysql_query(“insert   into   trans   (id)   values(‘2’)”))
{
mysql_query(“ROOLBACK”);//判断当执行失败时回滚
}
if(!mysql_query(“insert   into   trans   (id)   values(‘4’)”))
{
mysql_query(“ROOLBACK”);//判断执行失败回滚
}
mysql_query(“COMMIT”);//执行事务
mysql_close($handler);

例二:
<?php
$id=$_GET[id];
include_once(“conn.php”);
$conn->autocommit(false);
if(!$conn->query(“delete from tb_sco where id='”.$id.”‘”))
{
$conn->rollback();
}
if(!$conn->query(“delete from tb_stu where id='”.$id.”‘”))
{
$conn->rollback();
}
$conn->commit();
$conn->autocommit(true);
?>

<?php
//echo “=======”;exit;
$conn=mysql_connect(“localhost”,”root”,”root”);
if(!$conn){echo “数据库连接出错!”;
die();
}

mysql_select_db(“try”,$conn);
mysql_query(“SET NAMES GBK”);

$sql=”update aa set moeny=moeny-200 where uid=1″;
$sql2=”update bb set moeny=moeny+200 where uid=1″; //测试的时候,可以把这个写错,看效果
//$rst=mysql_query($sql2);
//echo $rst;exit;

mysql_query(“set autocommit=0”);//设置为不自动提交,因为MYSQL默认立即执行
//$t1=mysql_query($sql);
//$t2=mysql_query($sql2);

if(!mysql_query($sql)){
mysql_query(“ROOLBACK”);//判断执行失败回滚
echo “更新失败”;exit;
}

elseif(!mysql_query($sql2)){
mysql_query(“ROOLBACK”);//判断执行失败回滚
echo “更新失败”;exit;
}
else{
mysql_query(“commit”);//执行事务
echo “更新成功!”;exit;
}

收藏于 2010-07-20


关注公众号,了解更多it技术(it问答网

php对csv文件的读取,写入,输出下载操作

<?php
$file = fopen(‘text.csv’,’r’);

while ($data = fgetcsv($file)) {    //每次读取CSV里面的一行内容
//print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可
$goods_list[] = $data;
}
//print_r($goods_list);
echo $goods_list[0][1];
fclose($file);
?>

在实际工作中,很多时候需要把网站上的一些数据下载到CSV文件里,方便以后查看。

亦或者是用CSV进行一些批量的上传工作。

这个时候我们就需要对CSV进行读写操作。

1.CSV的读取操作

view plaincopy to clipboardprint?

  1. <?php
  2.     $file = fopen(‘D:/file/file.csv’,’r’);
  3.     while ($data = fgetcsv($file)) {    //每次读取CSV里面的一行内容
  4.          print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可
  5.      }
  6.      fclose($file);
  7. ?>

<?php$file = fopen(‘D:/file/file.csv’,’r’);while ($data = fgetcsv($file)) { //每次读取CSV里面的一行内容print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可}fclose($file);?>

2.CSV的写入操作

view plaincopy to clipboardprint?

  1. <?php
  2.   $fp = fopen(‘d:/file/file.csv’, ‘w’);
  3.   fputcsv($fp,array(‘aaa’,’bbb’,’cccc’));
  4.   fputcsv($fp,array(‘mmm’,’yyy’,’haha’));   //fputcsv可以用数组循环的方式进行实现
  5.    fclose($fp);
  6. ?>

<?php$fp = fopen(‘d:/file/file.csv’, ‘w’);fputcsv($fp,array(‘aaa’,’bbb’,’cccc’));fputcsv($fp,array(‘mmm’,’yyy’,’haha’)); //fputcsv可以用数组循环的方式进行实现fclose($fp);?>

3.输出CSV(下载功能)

view plaincopy to clipboardprint?

  1. <?php
  2.      header(“Content-Type: text/csv”);
  3.      header(“Content-Disposition: attachment; filename=test.csv”);
  4.      header(‘Cache-Control:must-revalidate,post-check=0,pre-check=0’);
  5.      header(‘Expires:0’);
  6.      header(‘Pragma:public’);
  7.     echo “id,areaCode,areaName\n”;
  8.     echo “1,cn,china\n”;
  9.     echo “2,us,America\n”;
  10. ?>

<?phpheader(“Content-Type: text/csv”);header(“Content-Disposition: attachment; filename=test.csv”);header(‘Cache-Control:must-revalidate,post-check=0,pre-check=0’);header(‘Expires:0’);header(‘Pragma:public’);echo “id,areaCode,areaName\n”;echo “1,cn,china\n”;echo “2,us,America\n”;?>


关注公众号,了解更多it技术(it问答网

用PHP5的SimpleXML解析XML文档

$xmlstring=<<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<note>
 
<to>xuduowei</to>
 
<from>John</from>
 
<heading>Reminder</heading>
 
<body>Don’t forget the meeting!</body>
 
</note>
 
XML;
 
 
$xml = simplexml_load_string($xmlstring);
 
 
var_dump($xml);

 

输出:

object(SimpleXMLElement)#1 (4) { [“to”]=> string(4) “George” [“from”]=> string(4) “John” [“heading”]=> string(8) “Reminder” [“body”]=> string(29) “Don’t forget the meeting!” }

 

$xmlstring = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>xuduowei</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don’t forget the meeting!</body>
</note>
XML;

$xml = simplexml_load_string($xmlstring);
//$xml = simplexml_load_string($xmlstring,'SimpleXMLElement',LIBXML_NOCDATA);

echo $xml->to;


php 的simplexml_load_string后两个参数有什么用处?

第二个参数表示解析所使用的类,类必须继承于SimpleXMLElement,而默认值就是SimpleXMLElement。
第三个参数表示解析的选项,LIBXML_NOCDATA表示不对CDATA进行转意,而是把他当成普通的文本进行解析。


假设XML节点里面如果有<goods_name><![CDATA[小牛N1]]></goods_name>,那么最终转换成对象里面是没有goods_name这个值

的,如果加了LIBXML_NOCDATA,值为小牛N1,相当于把<![CDATA[小牛N1]]>转换成了文本返回

 

 

xml 是一种创建元数据的语言,元数据是描述其它数据的数据,PHP中的XML处理是基于LIBXML2的,安装时默认开启。

可以通过phpinfo()函数查看是否开启了XML处理模块,DOM,LIBXML,SAMPLEXML。

首先,通过samplexml_load_file函数把xml文件加载到一个对象中,samplexml_load_file可以用户远程文件.
例如:

$xml = samplexml_load_file(“messages.xml”); // 本地文件系统,当前目录

$xml=simplexml_load_file(“http://www.xuduowei.com/tc/cs.xml”);//远程服务器上的

用 var_dump($xml) 和 print_r($xml) 分别输出其结构.var_dump给出了变量的类型和长度,而print_r可读性更强
输出对象中的所有元素名称和它的值.

echo $xml->MessageTitle; //输出消息的标题
echo $xml->MessageBody; // 输出消息体
echo $xml->MessageAuthor; //消息的作者

echo $xml->MessageDate;  // 消息产生的日期

echo $xml->MessageNumber;  // 消息代码

$xml=”<GetLatestContestAppResp>
<ret>0</ret>
<LatestContestApp>
<ContestApp>
<UserId>111</UserId>
<RealName>张三</RealName>
<AppName>battlefield1942</AppName>
</ContestApp>
<ContestApp>
<UserId>222</UserId>
<RealName>李四</RealName>
<AppName>battlefield II</AppName>
</ContestApp>
<ContestApp>
<UserId>333</UserId>
<RealName>王五</RealName>
<AppName>battlefield 1943</AppName>
</ContestApp>
… …
</LatestContestApp>
</GetLatestContestAppResp>”;

$xml_arr = simplexml_load_string($xml);
//print_r($xml_arr);
//echo count($xml_arr->LatestContestApp->ContestApp).”==”; //总数计算
//echo $xml_arr->LatestContestApp->ContestApp[1]->UserId;//取得相应的节点值


关注公众号,了解更多it技术(it问答网

如何让自己的本地APACHE服务器支持.htaccess

解决问题:

如何让自己的本地APACHE服务器支持”.htaccess”呢?其实只要简单修改一下apache的httpd.conf设置就可以让APACHE支持.htaccess了,来看看操作

打开httpd.conf文件(在那里? APACHE目录的CONF目录里面),用文本编辑器打开后,查找
(1)
Options FollowSymLinks
AllowOverride None

改为
Options FollowSymLinks
AllowOverride All
(2)去掉下面的注释
LoadModule rewrite_module modules/mod_rewrite.so

就可以了


关注公众号,了解更多it技术(it问答网

sql语句防注入攻击

and a.title like ‘%25$inp_search%25’ escape ‘`’

supesite block

function DelAllergic($inp_search){
$inp_search = str_replace(“‘” , “””, $inp_search);
$inp_search = str_replace(“_” , “`_”, $inp_search);
$inp_search = str_replace(“%” , “`%”, $inp_search);
$inp_search = str_replace(“/” , “`%5C”, $inp_search);
$inp_search = str_replace(“\\” , “`%2F”, $inp_search);
return $inp_search;
}


关注公众号,了解更多it技术(it问答网

PHP获得文件创建、修改、访问时间

PHP filectime() 函数
定义和用法
filectime() 函数返回指定文件的上次 inode 修改时间。

该函数返回文件上次 inode 被修改的时间。如果出错则返回 false。时间以 Unix 时间戳的方式返回。
语法
fileatime(filename) filename 必需。规定要检查的文件。
提示和注释
提示:本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。

注意:在大多数 Unix 文件系统中,当一个文件的 inode 数据被改变时则该文件被认为是修改了。也就是说,当文件的权限,所有者,所有组或其它 inode 中的元数据被更新时。参见 filemtime()(这才是你想用于在 Web 页面中建立“最后更新时间”脚注的函数)和 fileatime()。

注释:某些 Unix 说明文本中把 ctime 说成是该文件建立的时间,这是错的。在大多数 Unix 文件系统中,没有 Unix 文件的建立时间。
PHP filemtime()函数
定义和用法
filemtime() 函数返回文件内容上次的修改时间。若成功,则时间以 Unix 时间戳的方式返回。若失败,则返回 false。
语法
filemtime(filename) filename 必需。规定要检查的文件。
说明
本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。
提示和注释
提示:本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。
PHP fileatime()函数
定义和用法
fileatime() 函数返回指定文件的上次访问时间。

该函数返回文件上次被访问的时间。如果出错则返回 false。时间以 Unix 时间戳的方式返回。
语法
fileatime(filename) filename 必需。规定要检查的文件。
提示和注释
提示:本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。

注释:文件的 atime 应该在不论何时读取了该文件中的数据块时被更改。当一个应用程序定期访问大量文件或目录时很影响性能。有些 Unix 文件系统可以在加载时关闭 atime 的更新以提高这类程序的性能。USENET 新闻组假脱机是一个常见的例子。在这种文件系统下,本函数没有用处。

实例

< ?php
$a=filectime(“log.txt”);
echo “创建时间:”.date(“Y-m-d H:i:s”,$a).”
“;
$a=filemtime(“log.txt”);
echo “修改时间:”.date(“Y-m-d H:i:s”,$a).”
“;
$a=fileatime(“log.txt”);
echo “访问时间:”.date(“Y-m-d”,$a).”
“;
?>


关注公众号,了解更多it技术(it问答网

最新完美版本-jquery分批执行

<!–

作者:xuduowei

时间:2011年6月

–>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml“>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<!– title文字 –>
<title>网站查错</title>
<link rel=”stylesheet” href=”/css/css1.css” type=”text/css” />
<script src=”/js/jquery.js” ></script>
<script src=”/js/project.js” ></script>
<script language=”JavaScript” src=”/js/adminJs/dj.js”></script>
<style type=”text/css”>
#table_title1,#table_title2,#table_title3{background-color:#FFF;padding:4px;}
#table_title3{text-align:center;}
#table_title2{ color:#000;font-style:normal;font-weight:500;}
</style>
</head>

<body>
<!– 内容是总体一个 table–>
<table width=”100%” border=”0″ align=”center” cellpadding=”0″ cellspacing=”0″>
<!– 第1个tr开始–>
<tr>
<td width=”7″><img src=”/images/images1/c_03.jpg” width=”7″ height=”32″ /></td>

<td width=”100%” background=”/images/images1/c_05.jpg”>
<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td width=”40″ align=”center”><img src=”/images/images1/c_10.jpg” width=”21″ height=”25″ /></td>
<td align=”left” class=”lanse”>
<!– 标题栏文字 –>
<strong>网站查错</strong>
</td>
<td width=”104″ align=”right” valign=”top” class=”lanse”></td>
</tr>
</table>
</td>

<td width=”7″><img src=”/images/images1/c_07.jpg” width=”7″ height=”32″ /></td>
</tr>
<!– 第1个tr结束–>

<!– 第2个tr开始–>
<tr valign=top id=”pageAutoHeightTr”>
<td background=”/images/images1/c_18.jpg”></td>

<td >

<!– 这个table里面放的是 搜索栏的内容 –>
<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″ height=”35″ align=”center”  bgcolor=”#f3f3f3″ style=”border:1px solid #bebebe;”>
<tr >
<td width=”22″ height=”33″>&nbsp;</td>
<td width=”456″>

</td>
<td width=”333″>
<!– 这里是搜索按钮 –>
</td>

<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>

<!– 正文内容开始 –>
<!– 第一个表格开始 –>
<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td height=”10″ colspan=”3″>&nbsp;</td>
</tr>
<tr>
<td width=”10″ height=”132″>&nbsp;</td>
<td>

<table width=”100%” border=”0″ cellpadding=”0″ cellspacing=”1″ bgcolor=”#e9e9e9″ style=”padding:4px;”>
<tr>
<td  id=”table_title”  height=”25″>
<form id=”form1″ name=”form1″ method=”post” action=””>
<select name=”checkselect” id=”checkselect” onChange=”showdomain();”>
<option value=”0″ selected >请选择</option>
<option value=”all”>所有站(seo+支撑站)</option>
<?php foreach($showtypename[1] as $typename){ ?>
<option value=”<?php echo $typename[‘id’]?>”><?php echo $typename[‘typename’]?></option>
<?php }?>
</select>
<br/>
<br/>
<textarea name=”textarea” id=”textarea” cols=”45″ rows=”5″></textarea><br/>
<input type=”button” name=”button” id=”button” value=”提交” onclick=”return ccshow(”);” />
<div id=”sfnum”></div>
<div id=”sfnum_end”></div>
<div id=”status”></div>
</form>
<div id=’fachild’></div>
</td>
</tr>
</table>

</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan=”3″>&nbsp;</td>
</tr>
</table>
<!– 第一个表格结束 –>

 

<br><br><br>

<!– 正文中更多内容开始 –>
<!– 标题部分 –>

<!– 内容部分 –>

</td>
<td background=”/images/images1/c_16.jpg”></td>
</tr>
<!– 第2个tr结束–>

<!– 第3个tr开始–>
<tr>
<td><img src=”/images/images1/c_20.jpg” width=”7″ height=”7″ /></td>
<td background=”/images/images1/c_22.jpg”></td>
<td><img src=”/images/images1/c_24.jpg” width=”7″ height=”7″ /></td>
</tr>
<!– 第3个tr结束–>
</table>
</body>
</html>
<script>
//函数注释写在函数上面,普通注释写在相应的右侧。
var table , tbody;

//创建表格
function createtab(){
table = document.createElement(“table”);
//table.setAttribute(“id”,”table22″);
table.setAttribute(“border”,”0″);
//table.setAttribute(“width”,”500″); //width=”100%” border=”0″ cellpadding=”0″ cellspacing=”1″ bgcolor=”#e9e9e9″
table.setAttribute(“cellPadding”,”0″);
table.setAttribute(“cellSpacing”,”1″);
table.setAttribute(“bgColor”,”#e9e9e9″);
tbody = document.createElement(“tbody”);
table.appendChild(tbody);
document.getElementById(‘fachild’).appendChild(table);
}

//创建tr,td
function createtr(str,domain){

var domain=”<a href=’http://”+domain+”‘ target=’_blank’>”+domain+”</a>”;
//table.setAttribute(“border”,”1″);
var tr1 = document.createElement(“tr”);

var td3 = document.createElement(“td”);
$(td3).html(table.rows.length+1);
tr1.appendChild(td3);

var td1 = document.createElement(“td”);
$(td1).html(domain);
tr1.appendChild(td1);

var td2 = document.createElement(“td”);
$(td2).html(str);
tr1.appendChild(td2);
 

td1.setAttribute(“id”,”table_title1″);
td2.setAttribute(“id”,”table_title2″);
td3.setAttribute(“id”,”table_title3″);

td1.setAttribute(“width”,”400″);
td2.setAttribute(“width”,”300″);
td3.setAttribute(“width”,”100″);

tbody.appendChild(tr1);
return td2;

}

//除去空格
String.prototype.Trim = function(){
return this.replace(/(^\s*)|(\s*$)/g, “”);
}

//js删除表格 ————-暂不使用
/*
function deltable(tabname){
var table = document.getElementById(tabname);
for(var i=0; i<table.rows.length; i++){
table.deleteRow(i);
}
}
*/

//结束删除表格
/* 这个火狐下不兼容,就不用了
function delobj(obj){
if(!obj){
alert(obj);
return;
}
obj.innerHTML=”;
//obj.removeNode(true);
//obj=null;
//delete obj;
CollectGarbage();
}
*/
//获得需要执行的域名-根据选择的类型显示的
function showdomain(){
var checkselect=document.getElementById(“checkselect”).value;
$.ajax({
type: “POST”,
dataType: “json”,//这里返回的格式是json格式。
url: “index.php?c=checkSessionController&a=doshowdomain”,
data: {//传过去的post数据,这里格式是对象格式,比传统写法更严禁,如:&字符过滤。
“id”:checkselect,
“ajaxSend”:1 //这个是给框架设计用的,用了让框架知道是ajax提过来的。目的是能区别错误返回页面(错误提示!–框架中的)
},
error:_ajaxRetrunErrFunction ,//若出现返回数据的异常,被这个函数捕捉。
success: function(myjson){
//if(_ajaxReturnFunction(myjson)==true){//_ajaxReturnFunction是对返回的数据进行预处理,若返回的数据是json格式并且返回值==OK或返回的第一个键值==OK,则这个函数会弹出一个默认的说明以提示操作成功并返回值为真,否则就是提示操作失败,返回值为假。
//}
var textarea_value=””;
for(var i=0;i<myjson.length;i++){
textarea_value+=myjson[i].ftp_domain+”\r”;
}
$(“textarea”).text(textarea_value);
$(“#sfnum”).text(“需要执行站个数:”+myjson.length);
}
});
}

page_num=1;
allnum=0;
nownum=0;
//点击提交按钮的时候要执行的(返回值,回写表格)。
function ccshow(a){
document.getElementById(“button”).disabled=true;
document.getElementById(“status”).innerHTML=”<br/><font color=blue>状态:执行中……</font>”;

page_num=1;//重新初始化
nownum=0;
//document.getElementById(‘fachild’).innerHTML=”;
createtab();//为div再次添加表格
checkshow(a);
}

function checkshow(abc){
if(abc!=”){page_num++;}//让执行的页数加1;
// delobj(document.getElementById(‘fachild’));//清除div内容 ,这个火狐下不兼容,就不用了。
var textarea=document.getElementById(“textarea”).value;
textarea= textarea.Trim();
var checkselect=document.getElementById(“checkselect”).value;
if(textarea==””&&checkselect==”0″){
alert(“请选择类型或输入域名”);
return false;
}
var arrdomain=textarea.split(“\n”);

//定义分批
var onepagenum=10;//定义每次执行的数目;
var begain_i=(page_num-1)*onepagenum;
var pagecount=Math.ceil(arrdomain.length/onepagenum);//总个数除以每页要执行的==需要执行多少批。
var end_i=eval(begain_i)+eval(onepagenum);
var yu=arrdomain.length-begain_i;
if(yu<onepagenum){end_i=eval(begain_i)+eval(yu);}
var a=0; //初始化a,用来判断当前页是否执行完毕的。
//document.getElementById(“sfnum_end”).innerHTML=”1/”+pagecount+”批”;//初始化定义开始显示第一页

for(var i=begain_i;i<end_i;i++){
var adomain=arrdomain[i];
//var adomainstr=”<a href=’http://”+arrdomain[i]+”‘ target=’_blank’>”+arrdomain[i]+”</a>”;
var str=”&nbsp;<font color=red>系统运行结果……</font><br/>”;
if(page_num<=pagecount){

var mytd=createtr(str,adomain);
$.ajax({
type: “POST”,
url: “index.php?c=checkSessionController&a=doCheckSession”,
//cache: false,
// async: false,//默认是true异步操作,若async:false就是同步操作,
context: mytd,//这个参数是为了上下文对象用的,若这里定义了它(mytd)则在后面返回值中可以用$(this)指代mytd这个对象。
data: {
“domain”:adomain
// “nownum”:(i+1),
//”countnum”:arrdomain.length
},

success: function(msg){
$(this).html(msg);
allnum=allnum+1;
nownum=nownum+1;
//alert(allnum);
$(“#sfnum_end”).html(“<br/>已执行”+allnum+”/–当前执行比例:”+nownum+”/”+arrdomain.length);
if(++a==onepagenum){//若当前批都执行完了,就执行下一批。
checkshow(“yes”);
}
if(nownum==arrdomain.length){
document.getElementById(“status”).innerHTML=”<br/><font color=red>状态:完成</font>”;
document.getElementById(“button”).disabled=false;
}
}
});//结束ajax
}
}//结束for

}

</script>


关注公众号,了解更多it技术(it问答网

基于PHP的cURL快速入门

cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 库。本文将介绍 cURL 的一些高级特性,以及在PHP中如何运用它。

为什么要用 cURL?

是的,我们可以通过其他办法获取网页内容。大多数时候,我因为想偷懒,都直接用简单的PHP函数:

以下为引用的内容:

$content = file_get_contents(“http://www.nettuts.com”);
// or
$lines = file(“http://www.nettuts.com”);
// or
readfile(http://www.nettuts.com);

不过,这种做法缺乏灵活性和有效的错误处理。而且,你也不能用它完成一些高难度任务——比如处理coockies、验证、表单提交、文件上传等等。

引用:
cURL 是一种功能强大的库,支持很多不同的协议、选项,能提供 URL 请求相关的各种细节信息。

基本结构

在学习更为复杂的功能之前,先来看一下在PHP中建立cURL请求的基本步骤:

初始化 设置变量 执行并获取结果 释放cURL句柄

以下为引用的内容:

// 1. 初始化
$ch = curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, “http://www.nettuts.com”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);

第二步(也就是 curl_setopt() )最为重要,一切玄妙均在此。有一长串cURL参数可供设置,它们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些更常用也更有用的选项。

检查错误

你可以加一段检查错误的语句(虽然这并不是必需的):

以下为引用的内容:

// …
$output = curl_exec($ch);
if ($output === FALSE) {
echo “cURL Error: ” . curl_error($ch);
}
// …

请注意,比较的时候我们用的是“=== FALSE”,而非“== FALSE”。因为我们得区分 空输出 和 布尔值FALSE,后者才是真正的错误。

 


关注公众号,了解更多it技术(it问答网