关于跨域名传值的问题谁知道帮帮忙吧

关于跨域名传值的问题谁知道帮帮忙吧,第1张

嘿嘿,老兄,你走运了,刚好今天我看到一个好东西

http://bbsblueideacom/viewthreadphpaction=printable&tid=2641493

同域不同二级域名

$Data = array('user' => 'xiaoming');

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,'http://wwwacom/index');

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $Data);

$a = curl_exec($ch);

curl_close($ch);

print_r( $a );

 即使使用 PHP 多年 也会偶然发现一些未曾了解的函数和功能 其中有些是非常有用的 但没有得到充分利用 并不是所有人都会从头到尾一页一页地阅读手册和函数参考!

  任意参数数目的函数

 你可能已经知道 PHP 允许定义可选参数的函数 但也有完全允许任意数目的函数参数的方法 以下是可选参数的例子

 

  以下为引用的内容

 // function with optional arguments function foo($arg = $arg = ) {

 echo "arg : $arg n";  echo "arg : $arg n";

 }

 foo( hello world ); / prints: arg : hello arg : world /

 foo(); / prints: arg : arg : /

 现在让我们看看如何建立能够接受任何参数数目的函数 这一次需要使用 func_get_args() 函数

 

  以下为引用的内容

 // yes the argument list can be empty function foo() {

 // returns an array of all passed arguments  $args = func_get_args();

 foreach ($args as $k => $v) {   echo "arg" ($k+ ) ": $vn";  }

 }

 foo(); / prints nothing /

 foo( hello ); / prints arg : hello /

 foo( hello world again ); / prints arg : hello arg : world arg : again /

  使用 Glob() 查找文件

 许多 PHP 函数具有长描述性的名称 然而可能会很难说出 glob() 函数能做的事情 除非你已经通过多次使用并熟悉了它 可以把它看作是比 scandir() 函数更强大的版本 可以按照某种模式搜索文件

 

  以下为引用的内容

 // get all php files $files = glob( php );

 print_r($files); / output looks like: Array (     [ ] => phptest php     [ ] => pi php     [ ] => post_output php     [ ] => test php ) /

 你可以像这样获得多个文件

 

  以下为引用的内容

 // get all php files AND txt files $files = glob( {php txt} GLOB_BRACE);

lishixinzhi/Article/program/PHP/201311/21182

PHP自带了大量的系统函数,使用这些函数可以完成大部分的任务。常用的有数学运算函数和日期时间函数。

1数学运算函数:

数学运算是程序中最常执行的功能之一,PHP提供了很多系统函数实现运算功能,无须安装、编译和配置便可以直接使用。下表列出了常用的数学函数:

函数名称

功能描述

函数名称

功能描述

abs()

绝对值

is_finite()

判断是否为有限值

acos()

反余弦

is_infinite()

判断是否为无限值

acosh()

反双曲余弦

is_nan()

判断是否为合法数值

asin()

反正弦

lcg_value()

组合线性同余发生器

asinh()

反双曲正弦

log10()

以10为底的对数

atan2()

两个参数的反正切

log()

自然对数

atan()

反正切

max()

最大值

atanh()

反双曲正切

min()

最小值

base_convert()

在任意进制之间转换数字

mt_getrandmax()

显示随机数的最大可能值

bindec()

二进制转换为十进制

mt_rand()

生成更好的随机数

ceil()

进一法取整

mt_sran()

播下一个更好随机数种子

cos()

余弦

octdec()

八进制转换为十进制

cosh()

双曲余弦

pi()

圆周率

decbin()

十进制转换为二进制

pow()

指数表达式

dechex()

十进制转换为十六进制

rad2deg()

将弧度转换为相应的角度值

decoct()

十进制转换为八进制

rand()

产生一个随机数

deg2rad()

将角度转换为弧度

round()

对浮点数四舍五入

exp()

计算e的指数

sin()

正弦

floor()

舍去法取整

sinh()

双曲正弦

fmod()

返回除法的浮点数余数

sqrt()

平方根

getrandmax()

显示随机数最大的可能值

srand()

播下随机数发生器种子

hexdec()

十六进制转换为十进制

tan()

正切

hypot()

计算直角三角形的斜边长度

tanh()

双曲正切

注意:这些数学函数仅能处理计算机中integer和float范围的值。

示例:产生随机密码的的函数

function CreatePassword($length=6) //生成密码函数,默认6位

{

$dictionary=”abcdefghijklmnopqrstuvwxyz0123456789”; //密码字典

$maxChar=strlen($dictionary); //获取字典长度

$password=””;

for($i=0; $i<$length; $i++) //随机生成每一位

{

$password=$dictionary[rand(0, $maxChar)]; //产生随机数,再从字典取字母

}

return $password;

}

2日期和时间运算:

PHP提供了丰富的日期和时间方面运算的函数。

1)UNIX时间戳:

时间戳(Timestamp)是源于UNIX系统的时间表示方法,是指从1970年1月1日(00:00:00GMT)起到现在所经过的秒数,因此也称为UNIX时间戳。

在PHP中使用时间戳的最简单方式就是调用time()函数,time()函数可以根据当前时间返回一个时间戳的表示法。示例:

echo “当前时间戳为:”time();

2)日期函数:

PHP提供的一些常用的日期函数。

①date()函数:

date()函数用于格式化一个本地日期和时间。语法格式为:

string date(string $format [, int $timestamp])

返回将整数$timestamp按照$format给定格式而产生的字符串。其中,$timestamp参数是可选的,如果没有给出时间戳,则使用本地当前时间,即time()。

下表列出了$format格式化字符串参数的说明:

说明

返回值

D

月份中的第几天,有前导零的2位数字

01到31

D

星期中的第几天,文本表示,3个字母

Mon到Sun

J

月份中的第几天,没有前导零

1到31

L

L的小写字母,表示星期几的完整文本格式

Sunday到Saturday

N

数字表示的星期中的第几天

1(表示星期一)到7(表示星期天)

S

每月天数后面的英文后缀,2个字符

st,nd,rd或th。可以和j一起用

W

星期中的第几天,数字表示

0(表示星期天)到6(表示星期六)

Z

年份中的第几天

0到366

W

年份中的第几周,每周从星期一开始

例如:42(当年的第42周)

F

月份,完整的文本格式,例如January

January到December

M

数字表示的月份,有前导零

01到12

M

3个字母缩写表示的月份

Jan到Dec

N

数字表示的月份,没有前导零

1到12

t

给定月份所应有的天数

28到31

L

是否为闰年

如果是闰年为1,否则为0

o

年份数字

例如:2016

Y

4位数字完整表示的年份

例如:2016

y

2位数字表示的年份

例如:16

a

小写的上午和下午值

am或pm

A

大写的上午和下午值

AM或PM

g

小时,12小时格式,没有前导零

1到12

G

小时,24小时格式,没有前导零

0到23

h

小时,12小时格式,有前导零

01到12

H

小时,24小时格式,有前导零

00到23

i

有前导零的分钟数

00到59

s

秒数,有前导零

00到59

e

时区标识

例如:UTC,GMT,Atlantic/Azores

I

是否为夏令时

如果是夏令时为1,否则为0

O

与格林威治时间相差的小时数

例如:+0200

Z

时差偏移量的秒数

-43200到43200

c

ISO8601格式的日期

2011-05-12T15:19:21+00:00

r

RFC822格式的日期

例如:Thu, 21 Dec 2011 06:07:08 +0200

U

从January 1 1970 00:00:00开始至今的秒数

与time()函数相同

示例:

$today=date(“m/d/y”); //结果为:07/19/12

$today=date(“F j, Y, g:i a”); //结果为:July 19, 2012, 9:07 am

$today=date(“Y年n月j日”); //结果为:2012年7月19日

$today=date(“Y-m-d H:i:s”); //结果为:2012-07-19 09:07:32

$today=date(“D M j G:i:s T Y”); //结果为:Thu Jul 19 9:07:32 CST 2012

$today=date(‘i t i s t h e jS d a y’); //结果为:07 31 07 32 31 09 Asia/Shanghai 19th 19 am 12

$today=date(‘\i\t \i\s \t\h\e jS \d\a\y’); //结果为:it is the 19th day

$today=date(‘H:m:s \m \i\s\ \m\o \h’); //结果为:09:07:32 m is month

②gmdate()函数:

gmdate()函数实现与date()函数相同的功能,不同的是gmdate()函数返回的时间是格林威治标准时间(GMT)。语法格式为:

string gmdate(string $format [, int $timestamp])

③getdate()函数:

getdate()函数用于获取指定的日期和时间信息。语法格式为:

array getdate([int $timestamp])

如果没有指定时间戳$timestamp,则使用系统当前的本地时间。getdate()函数返回一个数组,数组中的每个元素代表日期和时间中的特定组成部分。下表列出了返回数组中键名的说明:

键名

说明

返回值例子

seconds

秒的数字表示

0到59

minutes

分钟的数字表示

0到59

hours

小时的数字表示

0到23

mday

月份中的第几天的数字表示

1到31

wday

星期中的第几天的数字表示

0(表示星期天)到6(表示星期六)

mon

月份的数字表示

1到12

year

4位数字表示的完整年份

例如:2016

yday

一年中的第几天的数字表示

0到365

weekday

星期几的完整文本表示

Sunday到Saturday

month

月份的完整的文本表示

January到December

0

自从UNIX纪元开始至今的秒数

和time()的返回值类似,是一个时间戳

示例:

<php

$today=getdate();

print_r($today);

printf(“今天是%s年%s月%s日 星期%s \n”, $today[“year”], $today[“mon”], $today[“mday”], $today[“wday”]);

printf(“现在时间是%s时%s分%s秒”, $today[“hours”], $today[“minutes”], $today[“seconds”]);

>

执行后的结果为:

Arrar

(

[seconds]=>15

[minutes]=>37

[hours]=>9

[mday]=>19

[wday]=>4

[mon]=>7

[year]=>2016

[yday]=>200

[weekday]=>Thursday

[month]=>July

[0]=>1342661835

)

今天是2016年7月19日 星期4

现在时间是 9时37分15秒

④checkdate()函数:

checkdate()函数用于检查一个日期是否有效,有效则返回true,否则返回false。语法格式为:

bool checkdate(int $month, int $day, int $year)

当满足如下条件时,checkdate()函数将认为是一个有效的日期:

·$year的值是从1到32767

·$month的值是从1到12

·$day的值在给定的$month所应该具有的天数范围之内,包括闰年情况

示例:

echo checkdate(2,29,2012)”有效”:”无效”;

2)时间函数:

①time()函数:

time()函数使用方法非常简单,没有参数调用后返回当前日期和时间的UNIX时间戳。语法格式为:

int time(void)

示例:

$next50day=time()+(50246060); //计算50天以后的日期

②mktime()函数:

mktime()函数的作用与time()函数相同,都可以返回一个时间戳表示的时间。不同的是,在mktime()函数中可以指定具体的日期和时间。语法格式为:

int mktime([int $hour],[int $minute],[int $second],[int $month], [int $day],[int $year])

上述参数列表从右向左顺序省略,任何省略的参数会被设置为本地日期和时间的当前值。如果指定的时间无法表示,则返回false。mktime()函数在做日期计算和验证方面很有用。示例:

$day1=mktime(0,0,0,12,25,2012);

$day2=mktime(0,0,0,10,1,2012);

$days=($day1-$day2)/(246060); //根据时间戳计算出相差的天数

③strtotime()函数:

strtotime()函数用于将可阅读的英文日期/时间字符串转换成UNIX时间戳。语法格式:

int strtotime(string $time[, int $now])

其中,$time参数表示要被转换的字符串,$now表示计算返回值的时间戳。如果没有提供$now参数,将使用系统的当前时间。strtotime()函数成功时返回时间戳,否则返回false。

④microtime()函数:

microtime()函数调用后将返回当前UNIX时间戳和微秒数。语法格式为:

mixed microtime([bool $get_as_float])

这里的可选参数$get_as_float是一个布尔值,如果为true将返回一个浮点数。默认不带参数时将以“msec sec”格式返回一个字符串,其中msec是微秒部分,sec是UNIX时间戳。

1、 通过jsonp跨域

JSONP(JSON with Padding:填充式JSON),应用JSON的一种新方法,

JSON、JSONP的区别:

1、JSON返回的是一串数据、JSONP返回的是脚本代码(包含一个函数调用)

2、JSONP 只支持get请求、不支持post请求

(类似往页面添加一个script标签,通过src属性去触发对指定地址的请求,故只能是Get请求)

2、代理:

  wwwbaiducom/indexhtml需要调用wwwsinacom/serverphp,可以写一个接口wwwbaiducom/serverphp,由这个接口在后端去调用wwwsinacom/serverphp并拿到返回值,然后再返回给indexhtml

3、PHP端修改header

  header(‘Access-Control-Allow-Origin:’);//允许所有来源访问

  header(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式

4、documentdomain

跨域分为两种,一种xhr不能访问不同源的文档,另一种是不同window之间不能进行交互 *** 作;

  documentdomain主要是解决第二种情况,且只能适用于主域相同子域不同的情况;

  documentdomain的设置是有限制的,我们只能把documentdomain设置成自身或更高一级的父域,且主域必须相同。例如:abexamplecom中某个文档的documentdomain可以设成abexamplecom、bexamplecom 、examplecom中的任意一个,但是不可以设成cabexamplecom,因为这是当前域的子域,也不可以设成baiducom,因为主域已经不相同了。

兼容性:所有浏览器都支持;

优点:

 可以实现不同window之间的相互访问和 *** 作;

缺点:

 只适用于父子window之间的通信,不能用于xhr;

 只能在主域相同且子域不同的情况下使用;

使用方式:

 不同的框架之间是可以获取window对象的,但却无法获取相应的属性和方法。比如,有一个页面,它的地址是http://wwwexamplecom/ahtml , 在这个页面里面有一个iframe,它的src是http://examplecom/bhtml, 很显然,这个页面与它里面的iframe框架是不同域的,所以我们是无法通过在页面中书写js代码来获取iframe中的东西的:

<script type="text/javascript">

function test(){

var iframe = documentgetElementById('ifame');

var win = documentcontentWindow;//可以获取到iframe里的window对象,但该window对象的属性和方法几乎是不可用的

var doc = windocument;//这里获取不到iframe里的document对象

var name = winname;//这里同样获取不到window对象的name属性

}

</script>

<iframe id = "iframe" src="http://examplecom/bhtml" onload = "test()"></iframe>

这个时候,documentdomain就可以派上用场了,我们只要把http://wwwexamplecom/ahtml 和 http://examplecom/bhtml这两个页面的documentdomain都设成相同的域名就可以了。

1在页面 http://wwwexamplecom/ahtml 中设置documentdomain:

<iframe id = "iframe" src="http://examplecom/bhtml" onload = "test()"></iframe>

<script type="text/javascript">

documentdomain = 'examplecom';//设置成主域

function test(){

alert(documentgetElementById('iframe')contentWindow);//contentWindow 可取得子窗口的 window 对象

}

</script>

2在页面 http://examplecom/bhtml 中也设置documentdomain:

<script type="text/javascript">

documentdomain = 'examplecom';//在iframe载入这个页面也设置documentdomain,使之与主页面的documentdomain相同

</script>

5、windowname

关键点:windowname在页面的生命周期里共享一个windowname;

兼容性:所有浏览器都支持;

优点:

 最简单的利用了浏览器的特性来做到不同域之间的数据传递;

 不需要前端和后端的特殊配制;

缺点:

 大小限制:windowname最大size是2M左右,不同浏览器中会有不同约定;

 安全性:当前页面所有window都可以修改,很不安全;

 数据类型:传递数据只能限于字符串,如果是对象或者其他会自动被转化为字符串,如下;

 这里写描述

使用方式:修改windowname的值即可;

6、postMessage

关键点:

 postMessage是h5引入的一个新概念,现在也在进一步的推广和发展中,他进行了一系列的封装,我们可以通过windowpostMessage的方式进行使用,并可以监听其发送的消息;

兼容性:移动端可以放心用,但是pc端需要做降级处理

优点

 不需要后端介入就可以做到跨域,一个函数外加两个参数(请求url,发送数据)就可以搞定;

 移动端兼容性好;

缺点

 无法做到一对一的传递方式:监听中需要做很多消息的识别,由于postMessage发出的消息对于同一个页面的不同功能相当于一个广播的过程,该页面的所有onmessage都会收到,所以需要做消息的判断;

安全性问题:三方可以通过截获,注入html或者脚本的形式监听到消息,从而能够做到篡改的效果,所以在postMessage和onmessage中一定要做好这方面的限制;

 发送的数据会通过结构化克隆算法进行序列化,所以只有满足该算法要求的参数才能够被解析,否则会报错,如function就不能当作参数进行传递;

使用方式:通信的函数,sendMessage负责发送消息,bindEvent负责消息的监听并处理,可以通过代码来做一个大致了解;

StorageprototypesendMessage_ = function(type, params, fn) {

if (thistopWindow) {

thishandleCookie_(type, params, fn);

return;

}

var eventId = thisaddToQueue_(fn, type);

var storageIframe = documentgetElementById('mip-storage-iframe');

var element = documentcreateElement("a");

elementhref = thisorigin;

var origin = elementhrefslice(0, elementhrefindexOf(elementpathname) + 1);

storageIframecontentWindowpostMessage({

type: type,

params: params,

eventId: eventId

}, origin);

}

StorageprototypebindEvent_ = function() {

windowonmessage = function (res) {

// 判断消息来源

if (window == ressourcewindowparent &&

resdatatype === thismessageTypeRES &&

windowlocationhrefmatch(resoriginhost)length > 0) {

var fn = thiseventQueue[resdataeventId];

fn && fn();

delete thiseventQueue[resdataeventId];

// reset id

var isEmpty = true;

for (var t in thiseventQueue) {

isEmpty = false;

}

if (isEmpty) {

thisid = 0;

}

}

}bind(this);

}

可以在页面定义一个调用方法,如下:

复制代码

代码如下:

function

getData(){

$getJSON("http://123123123123/callback=",

{

"m":"data",//

指定php的文件名字

"act":"getdata",//

指定php文件中的方法

"name":"问题儿童"//

传入的参数

},

function(data)

{

//

获得返回值

}

});

}

对应链接下(123123123123)的PHP文件,一般默认先调用indexphp文件,通过indexphp文件内的方法处理后,转到对应的php文件,并且找到对应的方法,执行之。

indexphp代码如下:

复制代码

代码如下:

<php

/

入口文件

/

$string

=

$_SERVER["REQUEST_URI"];//

获取访问的url

$m

=

get_m($string);

$file_path

=

"app/"$m"php";

define('IS_INDEX',true);//

阻止直接访问app目录

require

($file_path);

/

获取访问php文件

@param

string

$url

/

function

get_m($url){

$strings

=

explode('m=',

$url);

$res

=

explode("&",

$strings[1]);

return

empty($res[0])'index':$res[0];

}

>

dataphp代码如下:

复制代码

代码如下:

<php

/

data文件

/

$act

=

!empty($_GET['act'])

$_GET['act']

:

'';

if

($act

==

'getdata')

{

$name

=

"我的名字叫:"$_REQUEST['name'];

echo

$_REQUEST["callback"]"("json_encode($name)")";

}

>

成功调用后,画面就能获取到返回的json数据了。

function msg( msg = 'success', code = (int) msg = (string) data = (object) $data;

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11677945.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存