新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
源码下载下来后,首先安装php运行环境:简单点的集成环境有wamp,xampp等,搜索下载安装就可以了,具体安装和配置方法搜百度wamp安装使用方法。。
创新互联凭借在网站建设、网站推广领域领先的技术能力和多年的行业经验,为客户提供超值的营销型网站建设服务,我们始终认为:好的营销型网站就是好的业务员。我们已成功为企业单位、个人等客户提供了成都做网站、成都网站设计服务,以良好的商业信誉,完善的服务及深厚的技术力量处于同行领先地位。
安装好环境后,将源码放入环境的相应项目目录:如wamp默认在在www下,xampp是在htdoc;
如果是完整的CMS源码,一般都只要访问localhost就会有自动安装引导,绑定数据库;按提示操作就行,如果不是,那么久要先绑定数据库(nosql类型数据库除外)选择目录中conf或者config,或者db,或者config.php等类似文件或者目录配置你的数据库或者缓存库就可以测试了(如果每有编程基础,建议先语言入门);操作简单但还真得专人来
边访问,边看错,报错改错,知道没错,祝你早日入门
PHP上传文件非常简单,你需要一个上传的HTML文件(FORM),一个保存文件的PHP文件(保存),一个查询上传文件清单的工具。
真正实现完整功能的上传和管理需要使用数据库,我的网站俱乐部里面上传文件一开放很快就传了几万个文件。
最简单的方法不用数据库,可以用一个PHP文件实现,这个文件列出指定目录下的所有文件,然后提供一个上传的FORM,最后检测是否提交了FORM数据,是就保存文件到指定位置。
PHP手册第39章有关于处理这些问题的说明,我复制粘贴如下:
上一页 V. 特点 下一页
--------------------------------------------------------------------------------
第 39 章 文件上传处理
目录
POST 方法上传
错误信息说明
常见缺陷
上传多个文件
对 PUT 方法的支持
POST 方法上传
本特性可以使用户上传文本和二进制文件。用 PHP 的认证和文件操作函数,可以完全控制允许哪些人上传以及文件上传后怎样处理。
PHP 能够接受任何来自符合 RFC-1867 标准的浏览器(包括 Netscape Navigator 3 及更高版本,打了补丁的 Microsoft Internet Explorer 3 或者更高版本)上传的文件。
相关的设置: 请参阅 php.ini 的 file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size 以及 max_input_time 设置选项。
请注意 PHP 也支持 PUT 方法的文件上传,Netscape Composer 和 W3C 的 Amaya 客户端使用这种方法。请参阅对 PUT 方法的支持以获取更多信息。
例 39.1. 文件上传表单
可以如下建立一个特殊的表单来支持文件上传:
!-- The data encoding type, enctype, MUST be specified as below --
form enctype="multipart/form-data" action="__URL__" method="POST"
!-- MAX_FILE_SIZE must precede the file input field --
input type="hidden" name="MAX_FILE_SIZE" value="30000" /
!-- Name of input element determines name in $_FILES array --
Send this file: input name="userfile" type="file" /
input type="submit" value="Send File" /
/form
以上范例中的 __URL__ 应该被换掉,指向一个真实的 PHP 文件。
MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
注意: 要确保文件上传表单的属性是 enctype="multipart/form-data",否则文件上传不了。
全局变量 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此数组包含有所有上传的文件信息。
以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为 userfile。名称可随意命名。
$_FILES['userfile']['name']
客户端机器文件的原名称。
$_FILES['userfile']['type']
文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
$_FILES['userfile']['size']
已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']
和该文件上传相关的错误代码。此项目是在 PHP 4.2.0 版本中增加的。
文件被上传后,默认地会被储存到服务端的默认临时目录中,除非 php.ini 中的 upload_tmp_dir 设置为其它的路径。服务端的默认临时目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置,但是在 PHP 脚本内部通过运行 putenv() 函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。
例 39.2. 使文件上传生效
请查阅函数 is_uploaded_file() 和 move_uploaded_file() 以获取进一步的信息。以下范例处理由表单提供的文件上传。
?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo 'pre';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "/pre";
?
接受上传文件的 PHP 脚本为了决定接下来要对该文件进行哪些操作,应该实现任何逻辑上必要的检查。例如可以用 $_FILES['userfile']['size'] 变量来排除过大或过小的文件,也可以通过 $_FILES['userfile']['type'] 变量来排除文件类型和某种标准不相符合的文件,但只把这个当作一系列检查中的第一步,因为此值完全由客户端控制而在 PHP 端并不检查。自 PHP 4.2.0 起,还可以通过 $_FILES['userfile']['error'] 变量来根据不同的错误代码来计划下一步如何处理。不管怎样,要么将该文件从临时目录中删除,要么将其移动到其它的地方。
如果表单中没有选择上传的文件,则 PHP 变量 $_FILES['userfile']['size'] 的值将为 0,$_FILES['userfile']['tmp_name'] 将为空。
如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。
例 39.3. 上传一组文件
PHP 的 HTML 数组特性甚至支持文件类型。
form action="" method="post" enctype="multipart/form-data"
pPictures:
input type="file" name="pictures[]" /
input type="file" name="pictures[]" /
input type="file" name="pictures[]" /
input type="submit" value="Send" /
/p
/form
?php
foreach ($_FILES["pictures"]["error"] as $key = $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "data/$name");
}
}
?
--------------------------------------------------------------------------------
上一页 上一级 下一页
38. 处理 XForms 起始页 错误信息说明
PHP实现采集抓取淘宝网单个商品信息,本文是一种实现思路,使用file_get_contents函数实现,并给出了采集正则,需要的朋友可以参考下
调用淘宝的数据可以使用淘宝提供的api,如果只需调用淘宝商品图片名称等公开信息在自己网站上,使用php中的 file_get_contents 函数实现即可。
思路:
file_get_contents(url) 该函数根据 url 如 将该网页内容(源码)以字符串形式输出(一个整字符串),然后配合preg_match,preg_replace等这些正则表达式操作就可以实现获取该url特定div,img等信息了。当然前题是淘宝在单个商品页面的结构是固定的,如500图的img中id就是J_ImgBooth!
具体实现方法:(获取500图,名称,价格,属性及商品描述)
复制代码 代码如下:
$text=file_get_contents(""); //将url地址上页面内容保存进$text
A.获取500图:
复制代码 代码如下:
preg_match('/img[^]*id="J_ImgBooth"[^r]*rc=\"([^"]*)\"[^]*/', $text, $img);
//运用正则抓取img标签中id为J_ImgBooth的img,$img[0]为该500图img标签,$img[1]为500图的图片地址;
B. 获取名称:
复制代码 代码如下:
preg_match('/title([^]*)\/title/', $text, $title);
//因为正文中的商品名称标签没有特殊class或id正则不好抓取,就抓title标签中的内容了,一般来说title中内容就是商品名称了(实际有些出入),$title[0]整个title标签 $title[1]标签中内容;
$title=iconv('GBK','UTF-8',$title);
//如果你的网站是utf8编码,那么需要进行一下转码(淘宝是gbk编码)
C.获取价格:
复制代码 代码如下:
preg_match('/([a-z]+)[^i]*id=\"J_StrPrice\"[^]*([^]*)\/\\1/is', $text, $price);
//同理获取id为J_StrPrice的标签内容$price[2], $price[0]是整个标签, $price[1]为strong标签名;
$price=floatval($price);//放入数据库估计还有转一下变量类型
D.获取属性:
这之前获取的内容都是在单标签中相对只需一个正则就可搞定,然而如果要获取如
复制代码 代码如下:
…
div id=”xxx”
…
ul
…
/ul
div…
div…
/div
/div
/div
…
这样特定div中有未知n个标签,获取该特定div将会非常的困难,搜了下网上,最接近的也只是”/([a-z]+)[^]*([^]|(?R))*\/\\1/”这样使用递归抓取标签对,但是他不能抓特定标签,所以想要轻松抓取class=”attributes”的div我是没法办到了。但是淘宝网页有其特殊性,就是它的各个标签结构基本是固定的…div…/div标签后面不是/divdiv id=”description”就是/divdiv,所以我们可以采用变通法达到获取属性标签内容的目的。
复制代码 代码如下:
preg_match('/(div)[^c]*class=\"attributes\"[^]*.*\/\\1/is', $text, $text0);
//这个正则会抓取div开始到整个页面最后一个/div标签,当然我们属性标签就在这个的前面部分。
$text1=preg_replace("/\/div[^]*(div)[^c]*id=\"description\"[^]*.*\/\\1/is","",$text0);
//匹配到/div div id=”description”至最后/div然后用””代替(就是把匹配的删除了),所以如果attributes的div后面紧跟的是description那么我们已经达到目的了。
$attributes=preg_replace("/\/div[^]*(div)[^c]*class=\"box J_TBox\"[^]*.*\/\\1/is","",$text1);
//如果attributes后面紧跟box J_Tbox标签,那么我们还需要使用以上这步来剔除box J_Tbox标签,当然如果attributes的div后面紧跟的是description,这一步将不会匹配到任何即什么都不会做。
E.获取描述:
通过上面方法你肯定觉得淘宝页面上任何标签都可以很简单获取了吧(我之前也是这么想的),但是使用这个方法获取描述时得到的内容将会是“描述加载中”,是的,这个描述内容不是在源码中的,它是打开页面加载进一大堆js后,不知道从淘宝的哪个角落中加载进来的。
好吧,那么我们也可以模仿它放一些js进去。不知道哪些对加载描述有用?没事,全加载进来肯定没错。不知道需要放那些特定div上去有作用?抓一个源码,删掉一些div一步步试试看,你会发现“div id=”detail” /div
复制代码 代码如下:
div id="description"
div id="J_DivItemDesc"描述加载中/div
/div
这几个div是加载描述所必须的,那么下面就是写代码了:
复制代码 代码如下:
preg_match_all('/script[^]*[^]*\/script/is', $text, $content);//页面js脚本
$content=$content[0];
$description='div id="detail" /div
div id="description"
div id="J_DivItemDesc"描述加载中/div
/div';
foreach ($content as $v){$description.=iconv('GBK','UTF-8',$v);};
//将这个$description放进页面,描述就会自动的加载进来了,当然多个商品描述在同一个页面也会只有一个描述会被加载的。
接口的流程.
建立控制器(访问地址)-审核访问者身份(token)-验证提交数据是否符合类型(validate
)-处理接收数据(逻辑流程)-返回结果(json字符串).
其中要注意是否存在跨域,如果跨域要做跨域处理,例如返回jsonp.