PHP-實例-文件上傳

1 需求


2 basename

在 PHP 中,basename()?函數用于返回路徑中的文件名部分。如果路徑中包含了文件擴展名,則該函數也會返回它。如果路徑的結尾有斜杠(/)或反斜杠(\),則?basename()?函數會返回空字符串。

函數的基本語法是:

string basename ( string $path [, string $suffix ] )
  • $path?是必需的參數,指定了需要處理的路徑。
  • $suffix?是可選的參數,如果你指定了一個字符串作為后綴,并且這個后綴在文件名的末尾,那么它會被去除。

示例:

// 不帶后綴參數
$path = "/home/username/documents/myfile.txt";
$filename = basename($path);
echo $filename; // 輸出: myfile.txt// 帶有后綴參數
$filename = basename($path, ".txt");
echo $filename; // 輸出: myfile// 如果路徑以斜杠結尾
$path = "/home/username/documents/";
$filename = basename($path);
echo $filename; // 輸出: (空字符串)

注意,basename()?函數并不檢查文件或目錄是否真的存在,它只是根據提供的路徑字符串進行字符串操作。因此,即使?$path?指向的文件或目錄不存在,basename()?仍然會返回路徑中的文件名部分。

此外,如果你正在處理用戶輸入或不可信的路徑,你應該始終驗證和清理這些路徑,以防止潛在的安全風險,如目錄遍歷攻擊(也稱為路徑遍歷或本地文件包含)。


2?pathinfo

在 PHP 中,strtolower()?函數用于將字符串中的所有字符轉換為小寫,而?pathinfo()?函數用于返回文件路徑的信息。當你將?pathinfo()?與?PATHINFO_EXTENSION?常量一起使用時,它會返回文件路徑的擴展名部分。

將這兩個函數結合起來,strtolower(pathinfo($target_file, PATHINFO_EXTENSION))?的作用是獲取?$target_file?變量中指定的文件的擴展名,并將其轉換為小寫。

這里是一個示例:

$target_file = "uploads/myfile.JPG"; // 假設這是你的文件路徑// 使用 pathinfo 獲取擴展名,并使用 strtolower 轉換為小寫
$extension = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));echo $extension; // 輸出: jpg

在上面的示例中,$target_file?變量包含了一個文件路徑,其中文件的擴展名是 "JPG"。通過調用?pathinfo($target_file, PATHINFO_EXTENSION),我們獲取了擴展名 "JPG"。然后,我們使用?strtolower()?函數將其轉換為小寫,得到了 "jpg"。最后,我們將結果存儲在?$extension?變量中并輸出它。


2?htmlspecialchars

在 PHP 中,htmlspecialchars()?函數用于將特殊字符轉換為 HTML 實體。這樣做是為了防止跨站腳本攻擊(XSS)和其他安全漏洞,通過確保這些特殊字符在 HTML 上下文中被正確地轉義。

特殊字符包括:

  • &?(和號) 轉換為?&
  • "?(雙引號) 轉換為?"(只有當?ENT_QUOTES?被設置時)
  • '?(單引號) 轉換為?'(在 PHP 5.4.0 之前的版本中,只有當?ENT_QUOTES?被設置時;在 PHP 5.4.0 及更高版本中,總是如此)
  • <?(小于號) 轉換為?&lt;
  • >?(大于號) 轉換為?&gt;

函數的語法如下:

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
  • $string:需要轉換的字符串。
  • $flags:一個位掩碼,指定如何轉換字符串。可能的值包括?ENT_HTML401(默認,處理 HTML 4.01)、ENT_HTML5(處理 HTML 5)、ENT_XHTML(處理 XHTML)、ENT_QUOTES(轉義單引號和雙引號)等。
  • $encoding:指定使用的字符編碼。默認是?ini_get("default_charset")(通常是 UTF-8)。
  • $double_encode:當設置為?false?時,防止已經存在的 HTML 實體被雙重編碼。默認為?true

使用?htmlspecialchars()?的示例:

$user_input = '<script>alert("XSS!");</script>';
$safe_output = htmlspecialchars($user_input);echo $safe_output; // 輸出:&lt;script&gt;alert(&quot;XSS!&quot;);&lt;/script&gt;

在這個例子中,<script>?標簽和其中的 JavaScript 代碼被轉義成了無害的 HTML 實體,從而防止了 XSS 攻擊。當這段代碼被瀏覽器渲染時,它不會執行 JavaScript,而只是簡單地顯示文本。


3 示例


4 參考資料

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42621.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42621.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42621.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android計算器界面的設計——表格布局TableLayout實操

目錄 任務目標任務分析任務實施 任務目標 使用TextView、Button等實現一個計算器界面&#xff0c;界面如圖1所示。 圖1 計算器界面效果圖 任務分析 界面整體使用表格布局&#xff0c;第一行使用一個TextView控件&#xff0c;橫跨4列&#xff0c;中間4行4列&#xff0c;最后一…

Laravel HTTP客戶端:網絡請求的瑞士軍刀

標題&#xff1a;Laravel HTTP客戶端&#xff1a;網絡請求的瑞士軍刀 Laravel的HTTP客戶端是一個功能強大的工具&#xff0c;它提供了一種簡潔、直觀的方式來發送HTTP請求。無論是與外部API集成&#xff0c;還是進行網絡數據抓取&#xff0c;Laravel的HTTP客戶端都能滿足你的需…

小紅書選品中心商家采集 小紅書商家電話采集軟件

可采集名稱銷量評分聯系方式等 需要有1000粉絲以上已實名認證過的小紅書達人才可以使用 以下是一個示例程序&#xff0c;可以用于批量獲取小紅書選品中心商家的信息&#xff1a; import requestsdef get_merchants(page_num):url f"https://www.xiaohongshu.com/selec…

git 添加本地分支, clean

//以develop為源創建本地分支fromdevelop git checkout -b fromdevelop git add . git commit -m "local" git checkout -b local/dev //切換到遠程分支. git checkout dev git clean_git clean -f -d-CSDN博客 git clean -f -d #刪除當前目錄下沒有被track…

RAC spfile 坑 +data INSTANCE_NUMBER thread x is mounted by another instance

RAC相關三個參數 thread reset 就可以默認 instance_number 需要單獨設置 sid‘SIDX’ cluster_database boolean TRUE SQL> alter system reset instance_number sid* scopespfile; alter system reset instance_number sid* scopespfile …

解析Torch中`Transformer`

解析torch官方代碼腳本文件&#xff1a;transformer.py。版本&#xff1a;1.9.1cu111。 首先查看《Torch中多頭注意力MultiheadAttention的中文注釋》解析&#xff1b; 最后查看下方transformer解析。 話不多說&#xff0c;看代碼吧&#xff01; import copy from typing imp…

Vue的學習之class與style綁定

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>Vue的學習</title><script src"vue.js" type"text/javascript" charset"utf-8"></script></head><body><…

如何在std::map中查找元素

在std::map中查找元素可以通過幾種不同的方式完成&#xff0c;但最常用的方法是使用find成員函數。std::map是一個基于鍵值對的關聯容器&#xff0c;其中每個元素都是一個鍵值對。鍵是唯一的&#xff0c;并且用于排序和快速查找。 使用find成員函數 find成員函數接受一個鍵作…

io流 多線程

目錄 一、io流 1.什么是io流 2.流的方向 i.輸入流 ii.輸出流 3.操作文件的類型 i.字節流 1.拷貝 ii.字符流 ?3.字符流輸出流出數據 4.字節流和字符流的使用場景 5.練習 6.緩沖流 1.字節緩沖流拷貝文件 2.字符緩沖流特有的方法 1.方法 2.總結 7.轉換流基本用法…

第2集《修習止觀坐禪法要》

請打開補充講表第一面&#xff0c;附表一、念佛攝心方便法。 我們前面講到修止&#xff0c;就是善取所緣境的相貌&#xff0c;然后心于所緣&#xff0c;專一安住&#xff1b;心于所緣&#xff0c;相續安住&#xff1b;達到心一境性的目的。 站在修學凈土的角度&#xff0c;他…

FastAPI+SQLAlchemy數據庫連接

FastAPISQLAlchemy數據庫連接 目錄 FastAPISQLAlchemy數據庫連接配置數據庫連接創建表模型創建alembic遷移文件安裝初始化編輯env.py編輯alembic.ini遷移數據庫 視圖函數查詢 配置數據庫連接 # db.py from sqlalchemy import create_engine from sqlalchemy.orm import sessio…

9、程序化創意

程序化創意 程序化創意&#xff08;Programmatic Creative&#xff09;是指通過自動化的方式制作并優化廣告創意&#xff0c;以提高廣告效果。針對不同受眾的多樣化需求&#xff0c;以及同一受眾在不同場景下的消費需求&#xff0c;程序化創意能夠自動生成個性化的精準創意&am…

《C語言》預處理

文章目錄 一、預定義符號二、#define定義常量三、#define定義宏四、宏更函數的對比五、#和##1、#運算符2、##運算符 一、預定義符號 C語言設置了一些預定義符號&#xff0c;可以直接使用&#xff0c;在預處理期間進行處理的。 __FILE__//進行編譯的源文件 __LINE__//文件當前的…

在網站存在漏洞的情況下強化安全防御

一、引言 網絡安全是一個持續的戰斗&#xff0c;尤其是在網站存在已知或未知漏洞的情況下。本文將探討如何在網站存在漏洞的情況下&#xff0c;采取有效措施進行安全防御。 二、理解漏洞 首先&#xff0c;我們需要理解網站的漏洞。這些可能包括SQL注入、跨站腳本&#xff08…

【數據結構與算法】插入排序

&#x1f493; 博客主頁&#xff1a;倔強的石頭的CSDN主頁 &#x1f4dd;Gitee主頁&#xff1a;倔強的石頭的gitee主頁 ? 文章專欄&#xff1a;《數據結構與算法》 期待您的關注 ?

深入Laravel服務容器:構建靈活應用的秘訣

標題&#xff1a;深入Laravel服務容器&#xff1a;構建靈活應用的秘訣 Laravel框架的服務容器是一個強大的工具&#xff0c;它負責管理類的依賴關系和執行依賴注入&#xff08;DI&#xff09;。服務容器是Laravel依賴注入系統的核心&#xff0c;使得應用組件之間的耦合度降低&…

一周速遞|全球車聯網產業動態(2024年7月7日)

政策法規 1、7月5日&#xff0c;工業和信息化部部長金壯龍在新聞發布會上表示&#xff0c;新興產業要培育壯大。對新材料、人工智能、智能網聯新能源汽車、新型儲能、氫能、生物制造、商業航天、低空經濟等新興產業&#xff0c;要繼續用好國內大市場和豐富應用場景&#xff0c…

人工智能、機器學習、神經網絡、深度學習和卷積神經網絡的概念和關系

人工智能&#xff08;Artificial Intelligence&#xff0c;縮寫為AI&#xff09;--又稱為機器智能&#xff0c;是研究、開發用于模擬、延伸和擴展人的智能的理論、方法、技術及應用系統的一門新的技術科學。 人工智能是智能學科重要的組成部分&#xff0c;它企圖了解智能的實質…

【問題解決】 pyocd 報錯 No USB backend found 的解決方法

pyocd 報錯 No USB backend found 的解決方法 本文記錄了我在Windows 10系統上遇到的pyocd命令執行報錯——No USB backend found 的分析過程和解決方法。遇到類似問題的朋友可以直接參考最后的解決方法&#xff0c;向了解問題發送原因的可以查看原因分析部分。 文章目錄 pyoc…

排序-java(插入排序和選擇排序)

一&#xff0c;分類 主要的排序大致分為以下幾類&#xff1a; 1&#xff0c;插入排序&#xff0c;又分為直接插入排序和希爾排序 2&#xff0c;選擇排序&#xff0c;又分為選擇排序和堆排序 3&#xff0c;交換排序&#xff0c;又分為冒泡排序和快速排序 4&#xff0c;歸并…