如何跨网域跨主机跨server上传文件?一般最基本的上传方式是:
1.使用者把文件上传到 web server
2. web server 把上传的文件 利用 move_uploaded_file() 函式,将档案移到指定的文件夹内
但是,有时候我们需要把上传的档案放到另一台专门放文件的 file server,这时候,就无法利用 move_uploaded_file() 去搬移文件了,而需要利用 ftp 去传送文件至 file server,方法很简单...
直接看程式码:
代码如下 | 复制代码 |
$file = $_FILES['file']; $file_tmp = $file['tmp_name']; $file_name = $file['name']; if(is_uploaded_file($file_tmp)){ //确定user有"上传"文件 $file_ext = strrchr($file_name,'.'); //上传文件的副文件名 $file_name_new = date('YmdHis').$file_ext; $host = '127.0.0.1'; $port = '21'; $user = 'admin'; $pass = '123456'; $link = ftp_connect($host,$port); $login = ftp_login($link,$user,$pass); ftp_chdir($link,'filedir'); //切换到要放文件的文件夹 if(ftp_put($link,$file_name_new,$file_tmp,FTP_BINARY)){ $msg = '上传成功'; }else{ $msg = '上传失败'; } }else{ $msg = '上传失败'; } ftp_close($link); echo $msg; |
本文我们来讲讲PHP 利用HTTP Status Codes 传递Ajax 成功或失败的状态,文章后面附有PHP实现和C#实例,希望本文对你有所帮助。
一般处理Ajax 回应时会传送的信息种类有:数据、成功信息、错误信息、失败信息以及处理状态,传递的信息种类并不一致,再加上除了数据之外,通常还希望能传递处理状态,这种情况大部分会选择是以JSON 的方式传递这两个信息,以下是常见的几种格式:
但以执行状态跟操作行为作一个归纳,可以区分以下几种传递结果:
{ code: 1, msg: "OK" } { success: true , result: "data" , errorMsg: "" } { status: 'success' , result: [], errorMsg: "" } //...
但以执行状态跟操作行为作一个归纳,可以区分以下几种回传结果:
数据操作 HTTP Method 成功 错误/失败
读取(Read) GET 数据 错误/失败信息
新增 (Create) POST 成功信息 错误/失败信息
修改 (Update)
删除 (Delete)
从上面的归纳可以看出规律性,接着只要有方法可以传送处理的状态,以及能够区分数据的种类,其实就单纯很多,而HTTP Status Codes 就是用来传递HTTP 的处理状态,如果利用这个方式来传递自定义的处理状态,这样HTTP Content 就可以很单纯传递数据,让数据格式不受限于JSON,还可以使用其他格式(text, xml, html),而且XMLHttpRequest 本身就有处理HTTP Status Codes 的能力,而jQuery.ajax 也有提供error status 的处理,所以可以利用这个来定义状态的处理,在HTTP Status Codes 有几个已经定义状态,很适合用来传递处理状态的信息:
400Bad Request错误的请求适用在表单内容的错误,如必填栏位未填、Email 格式错误
403Forbidden没有权限,被禁止的适用在没有登录或权限不足
500Internal Server Error内部服务器错误适用在程序的错误
jQuery 接收信息的范例
代码如下 | 复制代码 |
$.ajax({ type: "POST" , url: document.location, success: function (data, textStatus, jqXHR) { alert(data); }, error: function (jqXHR, textStatus, errorThrown) { alert(jqXHR.responseText); } }); |
PHP 传递错误信息的范例
代码如下 | 复制代码 |
if (php_sapi_name() == 'cgi' ){ header ( "Status: 400 Bad Request" ); } else { header ( "HTTP/1.0 400 Bad Request" ); } exit ( "储存失败!!" ); |
C# MVC 传递错误信息的范例
代码如下 | 复制代码 |
Response.TrySkipIisCustomErrors = true ; Response.StatusCode = 400; return Content( "储存失败!!" ); |
两地距离我们通常用到最多的就是调用百度地图的api来实现了,但有时我们并不需要这接口了只需要简单的处理一即可,这时可以利用php来实现,具体如下。
目前在做一个交友项目,需要知道两个用户之间的距离。百度了一下,操作如下:
我们最容易获取到用户地理位置的信息就是ip。
我们通过百度api获取用户经纬度,用ip获取经纬度api:
http://developer.baidu.com/map/index.php?title=webapi/ip-api
得到经纬两个用户经纬度之后就可以计算两用户之间的距离了。计算如下:
代码如下 | 复制代码 |
/** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 */ function getDistance($lat1, $lng1, $lat2, $lng2) { $earthRadius = 6367000; //approximate radius of earth in meters $lat1 = ($lat1 * pi() ) / 180; $lng1 = ($lng1 * pi() ) / 180; $lat2 = ($lat2 * pi() ) / 180; $lng2 = ($lng2 * pi() ) / 180; $calcLongitude = $lng2 - $lng1; $calcLatitude = $lat2 - $lat1; $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2); $stepTwo = 2 * asin(min(1, sqrt($stepOne))); $calculatedDistance = $earthRadius * $stepTwo; return round($calculatedDistance); } |
代码未经测试。测试后再更新本篇文章告知结果。
APNS(英文全称:Apple Push Notification Service),中文翻译为:苹果推送通知服务。[1] 该技术由苹果公司提供的APNS服务,下面来看一个比较完善的苹果推送通知服务的php服务器端公共类前段时间开发的一套APNS推送平台效率很差,通过再次深入研究苹果的消息推送服务,总结了不少经验。同时也参考了网上一些技术blog的博文,重新完善了此前写过的一个PHP类,代码如下:
代码如下 | 复制代码 |
<?php protected function parseErrMsg($errorMessage) |
通过HTTP协议客户端类HttpClient来介绍PHP POST HTTP请求的方法,这个类你可以到官方http://scripts.incutio.com/httpclient/index.php下载也可以通过本站下载点击下载附件
下载好后通过两个文件来测试下,新建一个PHP文件加入如下内容:
代码如下 | 复制代码 |
<?php |
上面代码第5行中的请求页面地址是receive.php所以再建一个receive.php文件,写入如下内容:
代码如下 | 复制代码 |
<?php echo "username:".$_POST['username']."<br/>"; echo "password:".$_POST['password']."<br/>"; ?> |
执行你建的第一个PHP文件将看到如下内容: username:guowenlong password:hahahaha