當前位置:首頁 » 編程語言 » php解決跨域

php解決跨域

發布時間: 2022-10-02 18:45:30

A. php跨域上傳的幾種方法

方法一:
文件夾:/home/web/attachments
虛擬二級目錄到/home/web/zxsv/下(支持同區域網的伺服器)
​這樣多個子域名進行上傳的設計時,只需要attachments目錄映射為相關的域名的二級目錄,這樣就可實現多個子域名共享一個附件伺服器了,這種方法最好是用區域網中的附件伺服器,這樣流量是分開的,當然訪問附件的域名是apache,ngixn,IIS等的虛擬二級目錄就不說了,好處是現有程序不做任何修改,唯一壞處就是兩台伺服器必須在一個區域網中,當然你用單台也就沒這個問題了
方法二:ftp同步更新
PHP是支持FTP的,給個FTP類裡面(不是我寫的,只是加了個建立多級目錄),自己看著辦吧,上傳後調用FTP類,同步到FTP伺服器中,好處是現有程序只需要在上傳那段加上FTP上傳就行了,壞處就是一定要支持FTP
<?php
$ftp=new Ftp;
//print_r($ftp->nlist(」"));
$ftp->makedir(」3″);
//$ftp->put(」comment.php」,」1.txt」);
$ftp->bye();
//R FTP 處理;
class ftp {
var $ftpUrl = 『www.zxsv.com』;
var $ftpUser = 『zxsv』;
var $ftpPass = 『111111′;
var $ftpDir = 『/zxsv/』;
var $ftpR = 」; //R ftp資源;
var $status = 」;
//R 1:成功;2:無法連接ftp;3:用戶錯誤;
function ftp() {
if ($this->ftpR = ftp_connect($this->ftpUrl, 21)) {
if (ftp_login($this->ftpR, $this->ftpUser, $this->ftpPass)) {
if (!empty($this->ftpDir)) {
ftp_chdir($this->ftpR, $this->ftpDir);
}
ftp_pasv($this->ftpR, true);//R 啟用被動模式;
$status = 1;
} else {
$status = 3;
}
} else {
$status = 2;
}
}
//R 切換目錄;
function cd($dir) {
return ftp_chdir($this->ftpR, $dir);
}
//建立目錄
function mkdir($dir){
return ftp_mkdir($this->ftpR, $dir);
}
function makedir($dir) {
if(!$dir) return 0;
$dir = str_replace( 「\\」, 「/」, $dir );
$mdir = 「」;
foreach(explode( 「/」, $dir ) as $val ) {
$mdir .= $val.」/」;
if( $val == 「..」 || $val == 「.」 ) continue;
if(!@mkdir($mdir)){
echo 「創建目錄 [".$mdir."]失敗.」;
//exit;
}
}
return true;
}
//刪除目錄
function rmdir($dir){
return ftp_rmdir($this->ftpR, $dir);
}
//R 返回當前路勁;
function pwd() {
return ftp_pwd($this->ftpR);
}
//R 上傳文件;
function put($localFile, $remoteFile = 」) {
if ($remoteFile == 」) {
$remoteFile = end(explode(』/', $localFile));
}
$res = ftp_nb_put($this->ftpR, $remoteFile, $localFile, FTP_BINARY);
print_r($res);
while ($res == FTP_MOREDATA) {
$res = ftp_nb_continue($this->ftpR);
}
if ($res == FTP_FINISHED) {
return true;
} elseif ($res == FTP_FAILED) {
return false;
}
}
//R 下載文件;
function get($remoteFile, $localFile = 」) {
if ($localFile == 」) {
$localFile = end(explode(』/', $remoteFile));
}
if (ftp_get($this->ftpR, $localFile, $remoteFile, FTP_BINARY)) {
$flag = true;
} else {
$flag = false;
}
return $flag;
}
//R 文件大小;
function size($file) {
return ftp_size($this->ftpR, $file);
}
//R 文件是否存在;
function isFile($file) {
if ($this->size($file) >= 0) {
return true;
} else {
return false;
}
}
//R 文件時間
function fileTime($file) {
return ftp_mdtm($this->ftpR, $file);
}
//R 刪除文件;
function unlink($file) {
return ftp_delete($this->ftpR, $file);
}
function nlist($dir = 『/service/resource/』) {
return ftp_nlist($this->ftpR, $dir);
}
//R 關閉連接;
function bye() {
return ftp_close($this->ftpR);
}
}
?>

B. PHP 設置跨域 域名cookie

理論上php不可以跨域設置cookie;
php設置cookie流程:返回的信息攜帶信息,然後靠瀏覽器來執行寫入到cookie,一般瀏覽器安全機制已經限制跨域寫入;
如果你想偽造cookie,可以使用瀏覽器管理cookie的插件

C. PHP 設置跨域 域名cookie

理論上php不可以跨域設置cookie;
php設置cookie流程:返回的信息攜帶信息,然後靠瀏覽器來執行寫入到cookie,一般瀏覽器安全機制已經限制跨域寫入;
如果你想偽造cookie,可以使用瀏覽器管理cookie的插件

D. php js跨域請求,並設置cookies

首先要說的是,閣下的問題看起頗費神,中文英文符號混雜,大小寫混雜,讓閱讀者看起相當吃力。

其次,你跨域,JS不能使用POST和GET請求的,這是瀏覽器安全規則,不過可以使用其它辦法來獲得類似結果。

JS跨域,POST可以通過提交隱藏表單至隱藏框架頁來得到請求結果。而GET請求則可以在目標地址後面加上要請求的GET參數然後抓取目標頁的所有網頁內容,再通過正則處理獲得結果;也可以使用JSON來獲取(詳情請自行學習JSON,很簡單的)。

閣下的問題,只是獲取COOKIE時間,那麼可以直接通過JS抓取目標頁或JSON獲得。而B域名的cookies.php,完全不需要訪問index.php來獲得上一個COOKIE的時間,因為它們是同一個站,index.php能訪問到的COOKIE,cookies.php也能訪問到。

B域名的cookies.php參考如下(僅供參考,具體請根據自己情況另行寫代碼):

if(isset($_COOKIE["user"]))//
$time=$_COOKIE["user"];//
else
$time=0;//
$_COOKIE["user"]=time();
echo$time;
//或輸出JSON,請自行學習

終上,僅是提供一個思路,更多的還是要靠閣下自行摸索學習。

另外,這種跨域請求,建議使用JSON,因為它簡單方便。當你學會了,就表示你會寫介面和使用介面了(雖然這個只是最簡單的介面)。當然除了JSON還可以使用XML,只是性能稍差一些,也不錯

E. php什麼是跨域,怎麼解決跨域問題

伺服器端PHP跨域一般沒有限制,不像瀏覽器端有same origin policy。

把伺服器B中的代碼封裝一下,確定好輸入和輸出,比如輸入是一個HTTP Request,參數POST過去;輸出是從HTTP Response返回一段XML。之後在伺服器A的代碼中做一個對伺服器B的HTTP請求並處理返回的XML就好了

F. 如何解決ajax跨域問題

解決ajax跨域問題
方法1:
在伺服器端直接設置header內容:Access-Control-Allow-Origin:*
或者
Access-Control-Allow-Origin:允許訪問的url
這樣就可以直接請求到任何網站或者允許訪問的url
php程序這樣寫:
header('Access-Control-Allow-Origin:*');
或者
header('Access-Control-Allow-Origin:允許訪問的url ');
方法2:
在Nginx設置」頭信息「直接添加Access-Control-Allow-Origin:*的信息。

G. PHP cookie跨域問題

注意你是否設置了setcookie函數的$domain參數。如果內網域名和你設置的不一樣,就無法讀取cookie。但cookie是能寫進去的。
如果你用火狐瀏覽器,使用右鍵->查看頁面信息->安全 來查看cookie內容。看看你的問題出在哪裡。

H. 如何解決跨域問題

關於跨域名問題還是問題么,這方面的解決實踐非常多,今天我就舊話重提把我所知道的通過幾個應用場景來分別總結一下(轉帖請註明出處:http://blog.csdn.net/lenel)

先說明一點:我說的某某域名在您的控制下的意思是這個域名下的網頁由您來負責開發內部的javaScript
場景一:將bbs.xxx.com的頁面用iframe嵌入到www.xxx.com的中,如何在iframe內外使用js通信(轉帖請註明出處:http://blog.csdn.net/lenel)
一級域名都是xxx.com 這個域名一定是在您的控制下,所以你只要在兩個頁面中同時升級域名即可
在父窗口和iframe內部分別加上js語句:document.domain="xxx.com";
之後2個頁面就等於在同一域名下,通過window.parent oIframe.contentDocument就可以相互訪問,進行無障礙的JS通信
在新浪、淘寶等很多頁面都能找到這樣的語句。不過document.domain不可以隨便指定,只能向上升級,從bbs.xxx.com升級到yyy.com肯定會出錯

場景二:將www.yyy.com的頁面用iframe嵌入到www.xxx.com的中,兩個域名都在您的控制下,如何在iframe內外進行一定的數據交流(轉帖請註明出處:http://blog.csdn.net/lenel)
你可以通過相互改變hash值的方式來進行一些數據的通信

這里的實現基於如下技術要點:
1、父窗口通過改變子窗口的src中的hash值把一部分信息傳入,如果src只有hash部分改變,那麼子窗口是不會重新載入的。
2、
子窗口可以重寫父窗口的location.href,但是注意這里子窗口無法讀取而只能重寫location.href所以要求前提是您控制兩個域名,知
道當前父窗口的location.href是什麼並寫在子窗口內,這樣通過parent.location.href =
"已知的父窗口的href"+"#"+hash。這樣父窗口只有hash改變也不會重載。
3、上面兩步分別做到了兩個窗口之間的無刷新數據通知,
那麼下面的來說如何感知數據變化。標准中沒有相關規定,所以當前的任意瀏覽器遇到location.hash變化都不會觸發任何javaScript事
件,也就是說您要自己寫監聽函數來監視loaction.hash的值的變化。做法是通過setTimeout或者setInterval來寫一個監聽函
數每20-100ms查看一下hash是否變化,如果變化了驅動js根據新的數據做想做的事情。

這種實現的一些分析:
1、信息通道是雙向的,當然會兼容單向,如果只是父窗口向子窗口通知數據,只需要子窗口寫hash監聽,反之亦然。
2、局限性也是頗大,因為這種通信的前提是雙方知道對方的location.href。如果父窗口帶有動態的location.search也就是查詢參數,那麼子窗口的處理上就比較困難,需要把父窗口的location.search作為傳遞信息的一部分告知子窗口。
3、另外的困擾會有瀏覽器帶給你,IE之外的瀏覽器遇到hash的改變會記錄歷史,這樣你在處理前進後退的時候會非常頭疼

場景三:將www.yyy.com的頁面用iframe嵌入到www.xxx.com的中,只有被嵌入的yyy.com在您的控制下,如何在iframe內外進行一定的交流
真實場景:google adsence的一個需求,你希望google發現您的頁面不能匹配出相關性非常好的按點擊付費廣告時,你希望google的廣告iframe能夠隱藏。
google的廣告iframe在google域下顯然不能把自己隱藏掉,那麼怎麼辦呢?
1、google會提供給你一個html頁面
2、您將這個頁面放置在您的域名下,並告訴google它的位置
3、當google發現沒有很好的廣告時,會將子窗口的loaction重定向到您的那個頁面下,這樣您的頁面因為同域名就可以訪問父頁面來隱藏自己了
是不是很巧的方法?

場景四:您是內容發布商,如何改造介面,讓其他域名下的頁面可以從瀏覽器端出發獲得您的數據
我們知道ajax的xmlHttpRequest()說到底是一個無刷新請求伺服器數據的輔助工具,但是xmlHttpRequest並不能跨域名請求數據,在某些情況下成了極大的限制。
但是我們如果通過其他方式完成無刷新請求數據不也可以么,我們用Dom方法操作動態JS腳本請求來做這件事。
//創建一個腳本節點
var oScript = document.createElement('script');
//指定腳本src src可以指向任意域名
//注意src不再指向靜態js,而是帶著查詢參數指向一個動態腳本廣播服務。
oScript.src = "http://yyy.com/query.php?"+yourQueryString;

//如果指定了charset 同時還可以解決xmlHttpRequest另一大困擾 亂碼問題

//oScript.charset = "utf-8";
//通過Dom操作把這個新的節點加入到文檔當中
document.getElementsByTagName("head")[0].appendChild(oScript);

這樣只要query.php的輸出是可執行的javaScript腳本,比如:djsCallBack({jsondata});
當他從伺服器返回後就會自動執行,你可以方便的用json方式來做數據傳遞了。
要注意,您的腳本請求最好帶上時間戳,避免瀏覽器緩存造成取回數據實時性下降。

如果您是數據提供者,您可以要求數據索取者在查詢參數中提供回調函數名,比如query.php?callback=myDataHandler&key=...?
這樣您就可以根據參數來提供給他myDataHandler({jsondata}),這樣不同的數據索取者都會得到自定義的正確的非同步回調。

進一步發展,可以做一個統一的從xml到動態json的數據轉化伺服器,脫離數據的實際意義,針對任何xml介面都可以作為轉化後提供給客戶端直接訪問。
這樣就不用針對單獨xml數據服務,為了跨域名而做各自的後台數據抓取轉化服務。

用動態腳本傳數據功能非常強大,去年我最先在YAHOO的站點上看到這樣的應用,讓人眼前一亮。

總結總結:
第一種場景,相應的處理辦法有這非常好的效果,可以說完全解決了問題。
第二種場景,相應的處理辦法具有一定的跨域數據交流功效,具有相當大的局限,並不適合在復雜業務流程中應用,實際上我也確實也沒看到過基於此的大規模應用。
第三種場景,相應的處理辦法比較巧妙,雖然redirect之後就不幹你什麼事了,但如果你是google一樣面向眾多域名的內容提供商,也是個不錯的解決思路。
第四種場景,相應的處理辦法非常強大,對比Ajax可以看到,跨域名沒問題,無刷新沒問題,本身又是非同步的,JSON比xml快的多,同時解決亂碼問題,只是請求都是Get方式的,不能做Post方式的請求。多一種武器自然可以從容選擇了

I. 跨域是指什麼,因為什麼引起的有哪些解決方案web前端知識

域(Domain)是Windows網路中獨立運行的單位,域之間相互訪問則需要建立信任關系(即Trust Relation)。信任關系是連接在域與域之間的橋梁。當一個域與其他域建立了信任關系後,2個域之間不但可以按需要相互進行管理,還可以跨網分配文件和列印機等設備資源,使不同的域之間實現網路資源的共享與管理。 有一種簡明的說法來解釋廣域跨域:跨域訪問,簡單來說就是 A 網站的 javascript 代碼試圖訪問 B 網站,包括提交內容和獲取內容。由於安全原因,跨域訪問是被各大瀏覽器所默認禁止的。


解決方案:

1、js向伺服器發送請求,然後讓伺服器去另一個域上獲取數據後返回。(用於你無法控制另一個域)比如php中利用cUrl。
2、放置跨域文件.
3、用JSONP。雖然不能跨域進行通信,但是可以引入跨域的js文件。
先定義一個函數

varreturnData;
functiongetData(obj){
returnData=JSON.parse(obj);
}


當我們要向www..com/s.php請求數據的時候,我們可以引入某個包含返回信息的js文件。
比如:<script type="text/javascript" src="www..com/s.php?id=12321" />
js的內容是getData({json:'格式'});返回時輸出 格式是 text/javascript (比如php用header('Content-type:text/javascript');來輸出)
那麼文件載入好後解析js時就會執行這個函數,返回得到的數據就被賦值給了returnData變數
以這樣的方式插入到頁面中:

varscript=document.createElement('script');
script.src='www..com/s.php?id=12321';//傳入參數id=12321
body.appendChild(script);

J. 微信公眾號支付報跨域錯誤,後台是php

首先明確一個概念,微信介面並不是用ajax訪問的。希望你是在後台使用curl的。
在以上前提下,此報錯是因為你的後台沒有設置響應首部欄位導致。以下兩種方式均可解決:
後台入口文件同級目錄下 .htaccess文件添加以下語句
Header always set Access-Control-Allow-Origin "*"
或者
在被訪問的PHP文件頭部增加
header("Access-Control-Allow-Origin: *");

熱點內容
安卓上哪裡下大型游戲 發布:2024-12-23 15:10:58 瀏覽:189
明日之後目前適用於什麼配置 發布:2024-12-23 14:56:09 瀏覽:56
php全形半形 發布:2024-12-23 14:55:17 瀏覽:829
手機上傳助手 發布:2024-12-23 14:55:14 瀏覽:733
什麼樣的主機配置吃雞開全效 發布:2024-12-23 14:55:13 瀏覽:831
安卓我的世界114版本有什麼 發布:2024-12-23 14:42:17 瀏覽:711
vbox源碼 發布:2024-12-23 14:41:32 瀏覽:279
詩經是怎麼存儲 發布:2024-12-23 14:41:29 瀏覽:661
屏蔽視頻廣告腳本 發布:2024-12-23 14:41:24 瀏覽:420
php解析pdf 發布:2024-12-23 14:40:01 瀏覽:821