php怎么传返回值,php如何获取客户端信息?
代码入下,只做参考
class userPCInfo{
//获取客户端浏览器
public static function get_client_browser(){
$sys = $_SERVER['HTTP_USER_AGENT']; //获取用户代理字符串
if (stripos($sys, "Firefox/") > 0) {
preg_match("/Firefox\/([^;)]+)+/i", $sys, $b);
$exp[0] = "Firefox";
$exp[1] = $b[1]; //获取火狐浏览器的版本号
} elseif (stripos($sys, "Maxthon") > 0) {
preg_match("/Maxthon\/([\d\.]+)/", $sys, $aoyou);
$exp[0] = "傲游";
$exp[1] = $aoyou[1];
} elseif (stripos($sys, "MSIE") > 0) {
preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);
$exp[0] = "IE";
$exp[1] = $ie[1]; //获取IE的版本号
} elseif (stripos($sys, "OPR") > 0) {
preg_match("/OPR\/([\d\.]+)/", $sys, $opera);
$exp[0] = "Opera";
$exp[1] = $opera[1];
} elseif(stripos($sys, "Edge") > 0) {
//win10 Edge浏览器 添加了chrome内核标记 在判断Chrome之前匹配
preg_match("/Edge\/([\d\.]+)/", $sys, $Edge);
$exp[0] = "Edge";
$exp[1] = $Edge[1];
} elseif (stripos($sys, "Chrome") > 0) {
preg_match("/Chrome\/([\d\.]+)/", $sys, $google);
$exp[0] = "Chrome";
$exp[1] = $google[1]; //获取google chrome的版本号
} elseif(stripos($sys,'rv:')>0 && stripos($sys,'Gecko')>0){
preg_match("/rv:([\d\.]+)/", $sys, $IE);
$exp[0] = "IE";
$exp[1] = $IE[1];
}else {
$exp[0] = "未知浏览器";
$exp[1] = "";
}
return $exp;
}
//获取客户端操作系统
public static function get_client_os(){
$agent = $_SERVER['HTTP_USER_AGENT'];
$os = false;
if (preg_match('/win/i', $agent) && strpos($agent, '95')){
$os = 'Windows 95';
}else if (preg_match('/win 9x/i', $agent) && strpos($agent, '4.90')){
$os = 'Windows ME';
}else if (preg_match('/win/i', $agent) && preg_match('/98/i', $agent)){
$os = 'Windows 98';
}else if (preg_match('/win/i', $agent) && preg_match('/nt 6.0/i', $agent)){
$os = 'Windows Vista';
}else if (preg_match('/win/i', $agent) && preg_match('/nt 6.1/i', $agent)){
$os = 'Windows 7';
}else if (preg_match('/win/i', $agent) && preg_match('/nt 6.2/i', $agent)){
$os = 'Windows 8';
}else if(preg_match('/win/i', $agent) && preg_match('/nt 10.0/i', $agent)){
$os = 'Windows 10';#添加win10判断
}else if (preg_match('/win/i', $agent) && preg_match('/nt 5.1/i', $agent)){
$os = 'Windows XP';
}else if (preg_match('/win/i', $agent) && preg_match('/nt 5/i', $agent)){
$os = 'Windows 2000';
}else if (preg_match('/win/i', $agent) && preg_match('/nt/i', $agent)){
$os = 'Windows NT';
}else if (preg_match('/win/i', $agent) && preg_match('/32/i', $agent)){
$os = 'Windows 32';
}else if (preg_match('/linux/i', $agent)){
$os = 'Linux';
}else if (preg_match('/unix/i', $agent)){
$os = 'Unix';
}else if (preg_match('/sun/i', $agent) && preg_match('/os/i', $agent)){
$os = 'SunOS';
}else if (preg_match('/ibm/i', $agent) && preg_match('/os/i', $agent)){
$os = 'IBM OS/2';
}else if (preg_match('/Mac/i', $agent) && preg_match('/PC/i', $agent)){
$os = 'Macintosh';
}else if (preg_match('/PowerPC/i', $agent)){
$os = 'PowerPC';
}else if (preg_match('/AIX/i', $agent)){
$os = 'AIX';
}else if (preg_match('/HPUX/i', $agent)){
$os = 'HPUX';
}else if (preg_match('/NetBSD/i', $agent)){
$os = 'NetBSD';
}else if (preg_match('/BSD/i', $agent)){
$os = 'BSD';
}else if (preg_match('/OSF1/i', $agent)){
$os = 'OSF1';
}else if (preg_match('/IRIX/i', $agent)){
$os = 'IRIX';
}else if (preg_match('/FreeBSD/i', $agent)){
$os = 'FreeBSD';
}else if (preg_match('/teleport/i', $agent)){
$os = 'teleport';
}else if (preg_match('/flashget/i', $agent)){
$os = 'flashget';
}else if (preg_match('/webzip/i', $agent)){
$os = 'webzip';
}else if (preg_match('/offline/i', $agent)){
$os = 'offline';
}else{
$os = '未知操作系统';
}
return $os;
}
//获取ip地址
public static function get_ip() {
//判断服务器是否允许$_SERVER
if (isset($_SERVER)) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$realip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$realip = $_SERVER['REMOTE_ADDR'];
}
} else {
//不允许就使用getenv获取
if (getenv("HTTP_X_FORWARDED_FOR")) {
$realip = getenv("HTTP_X_FORWARDED_FOR");
} elseif (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}
//获取当前ip所在城市
public static function GetIpLookup($ip = ''){
if(empty($ip)){
return '请输入IP地址';
}
$test= 'http://ip.taobao.com/service/getIpInfo.php?ip='.$ip;
$res = @file_get_contents($test);
return $res;
}
}
PHP网站怎么调用别家的API?
首先我们要知道的是,API有很多种表现形式,对于不同形式的API,调用方式也是不同的。
API常见模式1、RPC(远程过程调用协议)
RPC是一种进程远程调用的方式,主要用于异构平台间的进程通信,是Client/Server模式。RPC可以使用多种协议(如:HTTP协议、自定义协议等)和序列化方式(如:JSON、XML、二进程),RPC是基于TCP或者自定义协议来实现的,性能较高,但耦合度也较高。
2、SOAP(简单对象访问协议)
SOAP其实是基于HTTP和XML的实现,基于HTTP协议。在耦合度、维护性、扩展性上比RPC要好,但是性能上会低于RPC,特别是XML这种消息传递的方式会影响性能。
虽说SOAP是基于HTTP的,但是SOAP提供了Session/Cookie机制来维持状态,所以一些需要状态的(如:调用某些API前需要进行认证)业务中还能看见SOAP的身影。
3、RESTful
RESTful其实是一种架构风格,它不是一种标准!RESTful可以理解为是Json+HTTP+POST/GET/PUT/DELETE 的组合,同样是基于HTTP协议的。REST相比于SOAP和RPC,更加简洁明了。
RESTful的无状态特性使得其适合在分布式环境中使用,所以现在的API都推荐使用RESTful设计风格。
PHP中如何调用第三方提供的API?上面讲到了,API有很多种模式,对于不同模式我们调用的方法就不同。下面介绍下PHP如何计用常见模式的API。
1、RPC
如果对方提供的API是RPC形式的,那一般都会提供PHP版本的Client给你,你按说明进行调用即可。
另外PHP生态中也有不少RPC框架,如:PHPRPC、Thrift、gRPC等。
2、SOAP
PHP 5内置有php_soap扩展,此扩展实现了PHP对Web Services的支持。
3、RESTful
说白了RESTful就是HTTP协议,只不过使用了不同的HTTP动词进行请求区分,我们推荐使用cURL类库进行RESTful API的请求。
不建议使用file_get_contents 函数进行HTTP类型的API调用,很多人习惯使用此函数调用HTTP API,但是又不设置超时时间,当API不稳定时严重影响了网站速度。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!html5写的网站和后台php语言该如何对接?
前端html+js一般是不能直接调用后端php中的函数的并返回结果的。
菜农在学习网站编程后,就被此事困扰很长时间。
因为前端的js可以通过ajax技术带参数访问后端的php过程,并返回结果。
那么是否js也能带参数访问任意php函数并返回结果?
菜农在网友的指点下完成此设想并测试通过!
其核心思想是通过js的ajax调用php的call_user_func_array()函数,以实现任意php函数的调用。
特别注意:
为了网站的安全和防止黑客的攻击,特别设立了$funclst数组,js只能调用$funclst数组内的特定函数。
php核心代码为:
$funclst = array("f0", "f1", "f2", "a1", "a2", "a3", "a4", "HotCount");
$func = $_REQUEST["function"];
if(in_array($func,$funclst) && function_exists($func)){//只能调用例程函数
if(isset($_REQUEST["age"]) && strpos(strtolower($_REQUEST["age"]), "http://")){
echo "函数$func()的参数中包含非法字符!!!";
} else {
$age =isset($_REQUEST["age"])? explode(",",$_REQUEST["age"]) : array();//参数以","分割
echo call_user_func_array($func,$age);
}
}else{
echo "函数$func()不存在!!!";
}
javascript通过Ajax直接调用任意PHP函数多参数例程
菜农在网友的指点下完成此例程,非常感谢!!!
如图所示,前两个分别是html和php的源码(csv内存储了访问该测试函数的次数,即网站访问计数器。
如何正确学习php?
对于初学者,大家都需要一套比较完整并且有趣的学习教程,所以小编整理了一套完整并且有趣的学习教程,希望可以帮助到初学者。跟着这套教程学习,肯定可以从入门到精通。
第一阶段:推荐视频:PHP基础视频_html+css+js
javascript+jQuery
html+css+bootstrap
Php轻松入门视频
第二阶段:推荐视频:6天玩转MySQL
PHP核心编程视频教程
第三阶段:推荐视频:基于PHP面向对象的自定义MVC框架高级项目开发
Smarty入门视频课程免费分享
第四阶段:推荐视频:SVN视频教程无偿分享
2017XML视频教程
2017AJAX系列视频教程
ThinkPHP开发框架2016版
2016最新Linux系列视频教程免费分享
第五阶段推荐视频:NoSQL之Redis技术
PHP微信接口开发
mongodb实操视频
第六阶段:推荐视频:珍贵HyBrid App视频免费分享
2016基于laravel框架app软件开发
以上就是一些自学的经验和视频了,楼主可以看一下哦!
如何用POST方法上传文件?
POST方法上传文件 随着PHP不断的完善,PHP对文件上传的支持也越来越完美,在PHP 4.0.3以前我们只能用copy() 和 is_uploaded_file()方法结合来上传文件,呵呵,其实就是这样我们也会感觉到PHP相对于ASP来说上传文件要方便很多,这也就是本人选择PHP的一点小小的引以为豪的地方。PHP 4.0.3之后PHP又出了一个新函数move_uploaded_file()。上传文件相对来说又简便了不少,只要这一个函数就行(我可不是说上传文件系统只要就一个函数就足够了,大家可不要误解我的意思,我的意思是move_uploaded_file是上传文件的一个核心函数)。 好了,我们看一个三个函数的讲解(资料来自:PHP手册)。 copy(string source,string desk); 将文件从 source 拷贝到 dest。如果成功则返回 TRUE,失败则返回 FALSE。 例: if (!copy($file, $file.'.bak')) { print ("failed to copy $file...\n"); } is_uploaded_file(string filename) 如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。 move_uploaded_file(string filename, string destination) 本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。 由三个函数的解释就可以得到一个结论,move_uploaded_file()是copy()和is_uploaded_file()函数的结合 讲了这么半天大家用起这三个函数可能还会有些生疏,下面给大家两个例子: 首先,建立一个前台页面,命名为index.html Code代码如下:
1,下面是关于copy()和is_uploaded_file()方法上传文件的方法(保存为:copy.php,上传文件需要将index.html中的_URL_改为copy.php) Code代码如下:
2,下面是关于move_uploaded_file()方法上传文件的方法(保存为:move.php,上传文件需要将index.html中的_URL_改为move.php) Code代码如下: 文件上传就讲到这里了,这只是两个小程序,其实要完成文件上传所要的代码可不是这些就能了事的。一般还要有文件大小限制,文件扩展名选取,还有一些其它的安全方案。