php讀取遠程文件
『壹』 php 網路開發詳解之遠程文件包含漏洞
以下代碼(Code)實現了根據瀏覽器地址欄參數的文件名稱包含不同文件的功能。
復制代碼
代碼如下:
<?php
$file_name
=
$_GET["filename"];
//獲得當前文件名
include("$file_name
");
//包含文件
//一些其他操作
?>
這時,通過在地址欄上指定不同的文件名就可以實現包含不同文件並執行的功能。例如,通過在瀏覽器上訪問http://localhost/test.php?filename=myinc.php就可以在代碼(Code)中包含並執行myinc.php文件。
由於上面的代碼(Code)沒有進行任何錯誤處理,在瀏覽器上不加參數運行,所以將得到以下運行結果。
Warning:
include(.php)
[function.include]:
failed
to
open
stream:
No
such
file
or
directory
in
C:\Program
Files\xampp\htdocs\Bugs\test6.php
on
line
3
Warning:
include()
[function.include]:
Failed
opening
'.php'
for
inclusion
(include_path='.;C:\Program
Files\xampp\php\pear\')
in
C:\Program
Files\xampp\htdocs\Bugs\test6.php
on
line
3
訪問者通過讀取這段錯誤信息,可以得知當前的操作是一個文件包含操作。這時,可以在自己的伺服器上放置一個相應的腳本代碼。需要注意的是PHP在獲取遠程文件時獲得的是遠程伺服器的最終輸出結果,而不是文件本身。該腳本代碼位於192.168.0.1伺服器上,文件名為hello.txt,腳本代碼(Code)如下所示。
復制代碼
代碼如下:
<?php
echo
"hello
world!";
?>
這時,通過在瀏覽器中訪問http://localhost/test.php?filename=http://192.168.0.1/hello.txt就可以運行hello.txt中的腳本了。
為了解決這個問題,一種方式是完善代碼的錯誤信息,使訪問者無法知道當前腳本正在包含參數中指定的文件。修改後的代碼(Code)如下所示。
復制代碼
代碼如下:
<?php
$file_name
=
$_GET["filename"];
//獲得當前文件名
if(!@include("$file_name.php"))
//包含文件
{
die("頁面在瀏覽過程中出現錯誤");
}
//一些其他操作
?>
修改後,如果在被包含的文件無法找到時將出現「頁面在瀏覽過程中出現錯誤」的錯誤信息,訪問者將無法獲得當前頁面的具體操作信息。
第二種方式可以更加有效地防止遠程文件包含攻擊。方式是替換地址欄參數中的斜線「/」。這樣,在地址欄參數中輸入遠程文件地址時,代碼將無法正確地獲得參數。修改後的代碼(Code)如下所示。
復制代碼
代碼如下:
<?php
$file_name
=
str_replace('/',
'',
$_GET["filename"]);
//獲得當前文件名
if(!@include("$file_name.php"))
//包含文件
{
die("頁面在瀏覽過程中出現錯誤");
}
//一些其他操作
?>
這樣,在瀏覽器中訪問http://localhost/test.php?filename=http://192.168.0.1/hello.txt
時,實際上PHP代碼(Code)獲得的包含文件名稱是http:192.168.0.1bugstest6_test。頁面將不會包含遠程文件,並顯示相應的錯誤信息。
『貳』 PHP遠程讀取excel文件,怎麼讀取
先用file_get_contents
或者curl把文件取回來
用phpexcel打開即可
『叄』 用php如何獲取遠程的xls表格文件地址,並將它下載到本地
寫段偽代碼給你:
//先獲取遠程網頁的源代碼
$html=file_get_contents(http://mp3..com/歌曲播放頁.html);
//用正則表達式分析源代碼中的資源鏈接
$link=preg_match_all(正則)...
//讀取資源文件
$bin=file_get_contents(http://mp3..com/時間都去哪了.mp3);
//保存資源文件到本地
$fp=fopen(時間都去哪了.mp3,wb)
$fp.writh($bin);
$fp.close();
先說好,不要讓我寫完整的源代碼,因為這里還涉及一些細節,比如說,你才提供的 xls ,就是需要登錄的,那麼你還要實現模擬登錄。
有些網站的資源鏈接有各種限制,需要你慢慢去深入。
『肆』 請問php如何像打開本地文件一樣打開遠程ftp伺服器上的文件
<?php
$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
$handle = fopen("http://www.example.com/", "r");
$handle = fopen("ftp://user:[email protected]/somefile.txt", "w");
?>
這樣不就好了,
'r' 只讀方式打開,將文件指針指向文件頭。
'r+' 讀寫方式打開,將文件指針指向文件頭。
'w' 寫入方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建之。
'w+' 讀寫方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建之。
'a' 寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。
'a+' 讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。
之後你就可以直接查詢php的手冊 ,,fopen fwrite file_get_content file_put_content 這幾個函數就好了
『伍』 php讀取遠程xml文件簡單方法
<?php
set_time_limit(0);
function_rand(){
$length=26;
$chars="";
$max=strlen($chars)-1;
mt_srand((double)microtime()*1000000);
$string='';
for($i=0;$i<$length;$i++){
$string.=$chars[mt_rand(0,$max)];
}
return$string;
}
$HTTP_SESSION=_rand();
$HTTP_SESSION;
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather?&theUserID=&theCityCode=貴港");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;.NETCLR1.1.4322;.NETCLR2.0.50727)");
$res=curl_exec($ch);
curl_close($ch);
//print_r($res);
$xml_array=simplexml_load_string($res);
//www.hi-docs.com/php/simplexml_load_string.html
foreach($xml_arrayas$tq){
echo$tq;
}
?>
『陸』 用PHP怎麼獲取遠程文件文件類型
1.圖片文件可以使用getimagesize函數。
2.其他文件可以解析文件的後綴。
『柒』 如何用PHP獲取遠程大文件的大小
1、用file_get_contents或者fopen、file、readfile等函數讀取url的時候,會創建一個名為$http_response_header的變數來保存http響應的報頭.
示例代碼一:
[php]viewplain<?php$url='http://www..com';$html=file_get_contents($url);print_r($http_response_header);//輸出結果Array([0]=>HTTP/1.1200OK[1]=>Date:Tue,06Nov201208:51:01GMT[2]=>Server:BWS/1.0[3]=>Content-Length:9803[4]=>Content-Type:text/html;charset=gbk[5]=>Cache-Control:private[6]=>Expires:Tue,06Nov201208:51:01GMT[7]=>Set-Cookie:BAIDUID=:FG=1;expires=Tue,06-Nov-4208:51:01GMT;path=/;domain=..com[8]=>P3P:CP="OTIDSPCORIVAOURINDCOM"[9]=>Connection:Close)?>2、使用fopen等函數打開的數據流信息可以用stream_get_meta_data來獲取。示例代碼二:[php]viewplain<?php$fp=fopen($url,'r');print_r(stream_get_meta_data($fp));fclose($fp);//輸出結果Array([wrapper_data]=>Array([0]=>HTTP/1.1200OK[1]=>Date:Tue,06Nov201208:54:22GMT[2]=>Server:BWS/1.0[3]=>Content-Length:9803[4]=>Content-Type:text/html;charset=gbk[5]=>Cache-Control:private[6]=>Expires:Tue,06Nov201208:54:22GMT[7]=>Set-Cookie:BAIDUID=:FG=1;expires=Tue,06-Nov-4208:54:22GMT;path=/;domain=..com[8]=>P3P:CP="OTIDSPCORIVAOURINDCOM"[9]=>Connection:Close)[wrapper_type]=>http[stream_type]=>tcp_socket[mode]=>r[unread_bytes]=>0[seekable]=>[uri]=>http://www..com[timed_out]=>[blocked]=>1[eof]=>)?>3、get_headers()也可以獲取請求url的響應報文。示例代碼三:[html]viewplain<?phpprint_r(get_headers($url));Array([0]=>HTTP/1.1200OK[1]=>Date:Tue,06Nov201208:58:41GMT[2]=>Server:BWS/1.0[3]=>Content-Length:9803[4]=>Content-Type:text/html;charset=gbk[5]=>Cache-Control:private[6]=>Expires:Tue,06Nov201208:58:41GMT[7]=>Set-Cookie:BAIDUID=:FG=1;expires=Tue,06-Nov-4208:58:41GMT;path=/;domain=..com[8]=>P3P:CP="OTIDSPCORIVAOURINDCOM"[9]=>Connection:Close)?>4、php5中新增的參數context使這些函數更加靈活,通過它我們可以定製http請求,甚至post數據。
『捌』 用php程序自動讀取遠程文件並更新到本地,每天一次,如何做
windows:
准備:
1.將 php.exe 的路徑加入 windows 的環境變數
2.編寫文件:
D:\fileGeter.php
<?php
$filelist = Array(
"http://**********/a.txt",
"http://**********/b.txt",
);
$saveas="D:\\" ;
$endl = ".txt"
function getfile(){
foreach( $filelist as $k => $file )
file_put_contents( $saveas . $k . $endl , file_get_contents( $file ) ) ;
}
getfile();
?>
3.執行cmd命令
at 11:20 /every:1,2,3,4,5,6,7 "php D:\fileGeter.php"
linux 更方便
直接把此文件包含進 你要寫的程序里就OK了,
fileGeter.php:
<?php
...
...
$saveas = "./";
...
..
?>
index.php:
<?php
require_once("fileGeter.php");
//and so on .....
.....
....
....
?>
『玖』 php獲取遠程文件的大小
本文實例講述了php獲取遠程文件大小的方法,分享給大家供大家參考。具體實現方法如下:
/*
**功能:獲取遠程文件的大小,返回值的單位是:位元組
*/
function
get_fileSize($url){
if(!isset($url)||trim($url)==''){
return
'';
}
ob_start();
$ch=curl_init($url);
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch,CURLOPT_NOBODY,1);
$okay=curl_exec($ch);
curl_close($ch);
$head=ob_get_contents();
ob_end_clean();
$regex='/Content-Length:\s([0-9].+?)\s/';
$count=preg_match($regex,$head,$matches);
return
isset($matches[1])&&is_numeric($matches[1])?$matches[1]:'';
}
希望本文所述對大家的php程序設計有所幫助,大家能夠喜歡小便的文章,大家共同進步。
『拾』 PHP遠程讀取excel文件,怎麼讀取
PHPExcel 通過 PHPExcel_Shared_OLERead 類的 read 方法讀取文件
但 read 方法里使用了 is_readable 函數來確認文件是否存在,而 is_readable 不能作用於 url
所以不可直接遠程讀取
但若繞過 is_readable 函數的話,就是可以的
public function read($sFileName)
{
// Check if file exists and is readable
if(!is_readable($sFileName)) {
throw new Exception("Could not open " . $sFileName . " for reading! File does not exist, or it is not readable.");
}
// Get the file data
$this->data = file_get_contents($sFileName);