第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用php輸出圖像

使用php輸出圖像

PHP
青春有我 2023-07-08 22:04:11
有一堆與此標(biāo)題相同的問(wèn)題。例如如何使用php輸出圖像?使用 PHP 輸出為圖像如何使用php輸出圖像并下載答案總是一些變化添加header('Content-type: image/jpeg');到您的代碼中毫無(wú)疑問(wèn),這是答案的重要部分,但遺漏了一些我真的無(wú)法解決的重要步驟?,F(xiàn)在,當(dāng)圖像位于根目錄下時(shí),使用 php 獲取圖像有明顯的好處。假設(shè)你有一個(gè)網(wǎng)頁(yè)<?phprequire_once("load_a_scripts.php");print("lots of html");// fetch image from below root directory and output in HTML?><img id="this_one" src="" height="200" width="200" />您想輸出上面的圖像 this_one 嗎?PHP 可以使用 readfile() 來(lái)獲取所需的文件,但這在這里并沒(méi)有多大用處(最多你會(huì)得到隨機(jī)的 unicode 輸出,而不是這里的正確圖像)。防止亂碼輸出的解決方案是使用這顯然在這里似乎不合適。不僅有輸出,這將使得設(shè)置標(biāo)題變得不可能,而且即使這一操作過(guò)程成功,人們所能期望的最好的結(jié)果就是出現(xiàn)圖像的下載提示。同樣,這不是所需的功能。因此,一些解決方案建議使用一些外部代碼,例如&ldquo;image.php&rdquo;,它將擁有自己的標(biāo)頭并獲取圖像,等等。然而,這又存在一些問(wèn)題。image.php 如何知道您想要什么圖像??<?php header('Content-Type:'.$photo);?if(isset($photo)&&isset($type)){? ? ?if(strlen($photo)>15||strlen($type)>6){? ? ? ? die();? ? ? ? }? ? $photo = strtolower($photo);? ? $photo = preg_replace('/[^a-z0-9 -]+/', '', $photo);? ? $photo = str_replace(' ', '-', $photo);? ? $photo = trim($photo, '-');? ? $type = strtolower($type);? ? $type = preg_replace('/[^a-z0-9 -]+/', '', $type);? ? $type = str_replace(' ', '-', $type);? ? $type = trim($type, '-');? ? readfile('../img/'.$user_id.$photo);}假設(shè)可以使用 GET 發(fā)送與圖像名稱 ($photo) 和 mime ($type) 相關(guān)的參數(shù),但同樣,什么發(fā)送這些參數(shù)以及如何發(fā)送?一些答案似乎表明您可以直接鏈接到外部 image.php ,就好像它是圖像一樣<img src="image.php" />?但這再次提出了一個(gè)問(wèn)題:image.php 如何知道 $photo 和 $type 的值。
查看完整描述

1 回答

?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊

您有兩個(gè)基本選項(xiàng):首先,使用外部圖像加載器/處理程序腳本(例如<img src="image.php?i=sunshine.jpg" />);其次,對(duì)圖像數(shù)據(jù)進(jìn)行 base64 編碼(例如<img src="data:image/png;base64, i26dfdXAd..." />)。第二個(gè)選項(xiàng)會(huì)讓你的 HTML 變得臃腫,就像沒(méi)有明天一樣。那么讓我們簡(jiǎn)單地看一下image.php處理程序方法。

處理程序如何知道要顯示什么圖像?它需要一個(gè)查詢字符串,例如image.php?i=sunshine.jpg;或image.php?i=sunshine&x=jpg;或者image.php?i=sunshine&x=jpg&s=600,如果您想加載特定尺寸,等等。您必須在 HTML 源中使用該格式,沒(méi)有腳本可以自動(dòng)知道要加載什么圖像。然后,發(fā)送參數(shù)的是“誰(shuí)”(您),而不是“什么”。您需要確保變量得到正確的清理(正如您的示例處理程序所做的那樣);與任何用戶可修改的輸入一樣,它們不應(yīng)該被信任,尤其是靠近文件系統(tǒng)操作(目錄遍歷等)的任何地方。$_GET['i']這些變量將作為、等供您的處理程序腳本使用$_GET['x']。

如果您覺(jué)得 URL 參數(shù)很麻煩,或者看起來(lái)很臟,您可以隨時(shí)重寫 URL。將圖像鏈接為<img src="images/sunshine.jpg" />,并.htaccess在 /images/ 文件夾(僅包含您的腳本)中設(shè)置重寫規(guī)則,將所有圖像請(qǐng)求傳遞到處理程序腳本。您還可以使用此方法來(lái)處理縮小的圖像版本,并將源 URL<img src="images/sunshine__600.jpg" />映射到重寫規(guī)則。

關(guān)于使用readfile()(脫口而出大塊數(shù)據(jù)的最內(nèi)存友好的方式),只要您在調(diào)用header('Content-type: image/jpeg');之前輸出(或其他適當(dāng)?shù)?MIME 標(biāo)頭)readfile(),它就會(huì)以所需的方式工作。也就是說(shuō),瀏覽器不會(huì)知道網(wǎng)絡(luò)服務(wù)器直接從文件系統(tǒng)提供的圖像與通過(guò)處理程序從網(wǎng)絡(luò)根外部提供的圖像之間的區(qū)別。它只是帶有圖像 HTTP 標(biāo)頭的數(shù)據(jù)。


編輯:獎(jiǎng)金。編寫了一個(gè)簡(jiǎn)約的安全部署文件處理程序。

<?php

/*?

?* Receive image call as: <img src="img.php?i=name.jpg" />

?* Output matching image file from $basepath directory

?*/


$basepath = '../images/'; // Path to image folder


$mimes = [ // Allowed image types:

? ? 'jpg' => 'image/jpeg',

? ? 'png' => 'image/png',

? ? 'gif' => 'image/gif',

? ? 'svg' => 'image/svg+xml',

];


!isset($_GET['i']) && die(); // Nothing to do here.


// Parse & Verify Extension

$ext = strtolower(pathinfo($_GET['i'], PATHINFO_EXTENSION));

!isset($mimes[$ext]) && die('Invalid filetype!'); // If MIME N/A: die!


// Parse & Sanitize Filename?

$file = basename($_GET['i']);

$file = preg_replace('#[^[:alnum:] ._-]#', '', $file);


$filepath = realpath($basepath . $file);

$filepath === false && die('Invalid filename!'); // If image N/A: die!


// Output MIME header and image:

header('Content-Type:' . $mimes[$ext]);

readfile($filepath);

exit;

如果您需要容納jpeg等變體,只需 a) 復(fù)制數(shù)組中的 MIME 定義$mimes,或 b) 添加擴(kuò)展規(guī)范化例程。如果您需要訪問(wèn)子文件夾中的圖像,例如?i=sun/shine.jpg,請(qǐng)重新編寫不帶basename.?(確保您不會(huì)受到目錄遍歷的影響?。?。[:alnum:] ._-]將從請(qǐng)求的文件名中刪除除 以外的字符。根據(jù)需要修改正則表達(dá)式。



查看完整回答
反對(duì) 回復(fù) 2023-07-08
  • 1 回答
  • 0 關(guān)注
  • 205 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)