當前位置:首頁 » 編程語言 » phprfc

phprfc

發布時間: 2022-11-19 20:40:02

php文件上傳失敗的問題

在用PHP進行文件上傳的操作中,需要知道怎麼控制上傳文件大小的設置,而文件可傳大小是受到多種因素制約的,現總結如下:
1、php.ini:upload_max_filesize 所上傳的文件的最大大小。默認值2M。

2、php.ini:memory_limit 本指令設定了一個腳本所能夠申請到的最大內存位元組數,默認值8M。如果不需要任何內存上的限制,必須將其設為 -1。如果內存不夠,則可能出現錯誤:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)
3、php.ini:post_max_size 設定POST數據所允許的最大大小。此設定也影響到文件上傳。要上傳大文件,該值必須大於 upload_max_filesize。
4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds
5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
6、如果用到mysql的BLOB進行二進制文件存儲,則需要設置my.ini:max_allowed_packet=xxM

7、httpd.conf
在 Apache 裡面有一個選項是 LimitRequestBody,這個選項可以限制用戶送出的 HTTP 請求內容。這個選項可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 內使用,分別可以用在 virtualhost 或目錄屬性設定。而 LimitRequestBody 的設定值是介乎 0 (無限制) 至 2147483647 (2GB)。
例如要在目錄 D:/AppServ/www 設定上傳限制為 100K,可以在 .htaccess 或 httpd.conf 加入以下語句:
LimitRequestBody 1024000000
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
LimitRequestBody 1024000000Options Indexes FollowSymLinks MultiViews ExecCGIAllowOverride AllOrder allow,denyAllow from all
如果透過 .htaccess 設定,儲存檔案後會立即生效;如透過 httpd.conf 設定,須要重新啟動 Apache。
PHP關於文件上傳部分,特別提到表單隱藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文檔中給出的例子如下:
<form enctype=」multipart/form-data」 action=」_URL_」 method=」POST」>
<input type=」hidden」 name=」MAX_FILE_SIZE」 value=」30000″>
Send this file: <input name=」userfile」 type=」file」>
<input type=」submit」 value=」Send File」>
form>
Send this file:
這里設置MAX_FILE_SIZE = 30000,期待一種可能,使得瀏覽器在傳送文件之前能夠依此作出預先判斷,如果文件尺寸大於30000位元組,則不執行實際的POST動作。也就是不往伺服器發送文件內容,而是直接在客戶端提醒用戶「你試圖上傳的文件超過30000位元組」。
這的確是一個非常棒的主張,但在現實中卻暫時無法實現。不是因為這個限制可以「被簡單地繞過」,而是IE和FireFox這兩個主流瀏覽器都不支持這個特性。PHP的這個建議尚未被採納。
MAX_FILE_SIZE還有一個用場:後台PHP會判斷接收到的文件大小是否大於這個值,如果超出,$_FILES[『thisfile』][『error』]會被設置為UPLOAD_ERR_FORM_SIZE(2),同時放棄保存臨時文件,將$_FILES[『thisfile』][『size』]置0。
這個例子,沒問題,表現正常,當我試圖上傳一個40多K的文件時,PHP程序報告「文件超過MAX_FILE_SIZE」。
但是,如果我們將表單中的MAX_FILE_SIZE從30000減少到1000,情形又如何呢?
上傳800位元組的文件,正常;
上傳40K的文件,PHP報告文件過大,也正常;
上傳3000個位元組的文件,PHP未報告錯誤,它成功保存了文件!出乎意料!
問題就出在main/rfc1867.c中判斷文件是否超長的這部分代碼上。php每次從buffer中讀取FILLUNIT位元組長度的內容後,首先判斷「已經讀到的內容長度(total_bytes)」是否大於MAX_FILE_SIZE,然後再增加「已經讀到的內容長度(total_bytes)」。這樣一來,和預計的結果之間至多會有FILLUNIT位元組的誤差,而FILLUNIT=1024*5=5K。(點擊bug了解詳細內容)
這就是說,當MAX_FILE_SIZE<5K時,上傳一個大於MAX_FILE_SIZE,但是小於5K的文件是沒有問題的。
當然,因為這個設置很容易被繞過,所以伺服器端編程不應當依賴於MAX_FILE_SIZE。而且,5K到底是個很小的數值,對大多數上傳文件的表單來說沒有影響。
PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的設置,和客戶端上傳給伺服器端的流量大小無關。
Apache伺服器從客戶端接收長度不超過LimitRequestBody位元組數的請求,然後傳送給php模塊,php模塊再決定是否保存成臨時文件,設置$_FILES全局變數,移交給script進一步處理。
這個Apache的LimitRequestBody選項預設值=0,允許Request body的最大位元組數是2G(Linux + Apache)
最後還要注意的是:
html本身能夠post數據也是有限制的,不能超過2G。
ftp客戶端有文件偏移指針的2GB邊界限制,未使用特殊編譯flag編譯的ftp伺服器端或者客戶端,無論在什麼FS中都不支持大於2GB的文件。不知道PHP會不會也有這種情況。

Ⅱ Php7有哪些新特性

PHP 7.4 的主要特性包括以下幾個,

短閉包函數(short closure) 預載入提交性能 屬性類型限定 Improved type variance(不會翻譯) 三元運算簡寫 數組展開運算 新增類的魔術方法:serialization 數字分隔符 運算優先順序 允許在__toString中拋出異常 支持反射引用 新增位元組分割函數 移除php短標簽 棄用左關聯運算符 不再向後兼容的變更 短閉包函數

短閉包函數可以減少冗餘代碼:

array_map(function (User $user) { return $user->id; }, $users) array_map(fn(User $user) => $user->id, $users)

需要注意幾點:

短閉包可以直接訪問閉包函數外面的變數,所以不需要再寫?use?關鍵詞 以fn關鍵詞開始 $this?可以像普通的閉包一樣使用 短閉包只有一行代碼,僅僅做返回聲明使用,不允許使用return?關鍵詞

還可以使用更嚴格類型的方式

$ids = array_map(fn(User $user): int => $user->id, $user); 預載入

PHP預載入可以極大的提高性能

優點:在PHP 7.4以前,如果你使用了框架來開發,每次請求文件就必須載入和重新編譯。預載入在框架啟動時在內存中載入文件,而且在後續請求中永久有效。

缺點:性能的提升會在其他方面花費很大的代價,每次預載入的文件發生改變時,框架需要重新啟動。

屬性類型限定 class A { public string $name; public Foo $foo; }

不得不說,PHP越來越接近Java等強類型語言

Improved type variance

協變返回類型:

class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }

依賴(是不是很熟悉):

class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } 簡寫三元運算符

在目前> PHP 7以後的寫法:

$data['date'] = $data['date'] ?? new DateTime(); 在PHP 7.4你可以這樣寫: $data['date'] ??= new DateTime(); 數組展開運算

合並數組到另一個數組中,返回一維數組

$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]

注意? :只對數字索引有效

新增類的魔術方法

RFC添加了兩個新的魔術方法__serialize和__unserialize

數字分隔符

允許使用下劃線更直觀的分隔數值

$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; 運算優先順序

PHP 7.4之前,如果你這樣寫:

echo "sum: " . $a + $b; PHP會解析為: echo ("sum: " . $a) + $b; PHP 8將會解析為: echo "sum :" . ($a + $b); __toString中拋出異常支持反射引用

PHP 7.4將會新增ReflectionReference?類

移除php短標簽

<?將會在PHP 8中移除,<?=會繼續保留

棄用左關聯運算符

PHP遺留了一些奇怪的怪癖,比如

1 ? 2 : 3 ? 4 : 5; // 將會在 PHP 7.4 中廢棄,在 PHP 8中會拋出編譯錯誤 (1 ? 2 : 3) ? 4 : 5; // 正確 不再向後兼容的變更 棄用在沒有父類的情況下調用parent:: 調用var_mp列印DateTime和DateTimeImmutableshi』實例,將不再保留對象上的可訪問屬性 openssl_random_pseudo_bytes?會在調用錯誤時拋出異常 序列化PDO和PDOStatement?實例將會生成一個Exception而不是PDOException異常 調用get_object_vars()列印ArrayObject?實例將會返回ArrayObject?自己的屬性,而不是被包裹的數組或對象的值,

數組強制轉換不受影響

Ⅲ PHP文件上傳設置問題

PHP上傳文件非常簡單,你需要一個上傳的HTML文件(<FORM>),一個保存文件的PHP文件(保存),一個查詢上傳文件清單的工具。

真正實現完整功能的上傳和管理需要使用資料庫,我的網站俱樂部裡面上傳文件一開放很快就傳了幾萬個文件。

最簡單的方法不用資料庫,可以用一個PHP文件實現,這個文件列出指定目錄下的所有文件,然後提供一個上傳的FORM,最後檢測是否提交了FORM數據,是就保存文件到指定位置。

--------------------------------------------------------------------------------
文件上傳處理

POST 方法上傳
本特性可以使用戶上傳文本和二進制文件。用 PHP 的認證和文件操作函數,可以完全控制允許哪些人上傳以及文件上傳後怎樣處理。

PHP 能夠接受任何來自符合 RFC-1867 標準的瀏覽器(包括 Netscape Navigator 3 及更高版本,打了補丁的 Microsoft Internet Explorer 3 或者更高版本)上傳的文件。

相關的設置: 請參閱 php.ini 的 file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size 以及 max_input_time 設置選項。

請注意 PHP 也支持 PUT 方法的文件上傳,Netscape Composer 和 W3C 的 Amaya 客戶端使用這種方法。請參閱對 PUT 方法的支持以獲取更多信息。

例 39.1. 文件上傳表單

可以如下建立一個特殊的表單來支持文件上傳:

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

以上範例中的 __URL__ 應該被換掉,指向一個真實的 PHP 文件。

MAX_FILE_SIZE 隱藏欄位(單位為位元組)必須放在文件輸入欄位之前,其值為接收文件的最大尺寸。這是對瀏覽器的一個建議,PHP 也會檢查此項。在瀏覽器端可以簡單繞過此設置,因此不要指望用此特性來阻擋大文件。實際上,PHP 設置中的上傳文件最大值是不會失效的。但是最好還是在表單中加上此項目,因為它可以避免用戶在花時間等待上傳大文件之後才發現文件過大上傳失敗的麻煩。

注意: 要確保文件上傳表單的屬性是 enctype="multipart/form-data",否則文件上傳不了。

全局變數 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此數組包含有所有上傳的文件信息。

以上範例中 $_FILES 數組的內容如下所示。我們假設文件上傳欄位的名稱如上例所示,為 userfile。名稱可隨意命名。

$_FILES['userfile']['name']
客戶端機器文件的原名稱。

$_FILES['userfile']['type']
文件的 MIME 類型,如果瀏覽器提供此信息的話。一個例子是「image/gif」。不過此 MIME 類型在 PHP 端並不檢查,因此不要想當然認為有這個值。

$_FILES['userfile']['size']
已上傳文件的大小,單位為位元組。

$_FILES['userfile']['tmp_name']
文件被上傳後在服務端儲存的臨時文件名。

$_FILES['userfile']['error']
和該文件上傳相關的錯誤代碼。此項目是在 PHP 4.2.0 版本中增加的。

文件被上傳後,默認地會被儲存到服務端的默認臨時目錄中,除非 php.ini 中的 upload_tmp_dir 設置為其它的路徑。服務端的默認臨時目錄可以通過更改 PHP 運行環境的環境變數 TMPDIR 來重新設置,但是在 PHP 腳本內部通過運行 putenv() 函數來設置是不起作用的。該環境變數也可以用來確認其它的操作也是在上傳的文件上進行的。

使文件上傳生效

請查閱函數 is_uploaded_file() 和 move_uploaded_file() 以獲取進一步的信息。以下範例處理由表單提供的文件上傳。

<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?>

接受上傳文件的 PHP 腳本為了決定接下來要對該文件進行哪些操作,應該實現任何邏輯上必要的檢查。例如可以用 $_FILES['userfile']['size'] 變數來排除過大或過小的文件,也可以通過 $_FILES['userfile']['type'] 變數來排除文件類型和某種標准不相符合的文件,但只把這個當作一系列檢查中的第一步,因為此值完全由客戶端控制而在 PHP 端並不檢查。自 PHP 4.2.0 起,還可以通過 $_FILES['userfile']['error'] 變數來根據不同的錯誤代碼來計劃下一步如何處理。不管怎樣,要麼將該文件從臨時目錄中刪除,要麼將其移動到其它的地方。

如果表單中沒有選擇上傳的文件,則 PHP 變數 $_FILES['userfile']['size'] 的值將為 0,$_FILES['userfile']['tmp_name'] 將為空。

如果該文件沒有被移動到其它地方也沒有被改名,則該文件將在表單請求結束時被刪除。

上傳一組文件

PHP 的 HTML 數組特性甚至支持文件類型。

<form action="" method="post" enctype="multipart/form-data">
<p>Pictures:
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="submit" value="Send" />
</p>
</form>

<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "data/$name");
}
}
?>

Ⅳ php http_build_query問題

http_build_query($a); // method=test×=2013-06-15+19%3A46%3A23
由於 參數之間會用 & 分隔,而恰好 × 是 × 的實體名稱,所以顯示出來就是 × 了。

如果你直接看頁面源代碼,是正確的,就是顯示出來不一樣。

Ⅳ 用php怎樣做多線程的方法

php(做為現在的主流開發語言)中實現多線程? 看到這個標題, 你一定以為我瘋了..但是事實上我真的這么做了.
下面是我的一些做法, 已經實驗過. 確實可以的.
我們知道php(做為現在的主流開發語言)本身是不支持多線程的, 但是我們的WEB伺服器是支持多線程的.
也就是說可以同時讓多人一起訪問. 這也是我在php(做為現在的主流開發語言)中實現多線程的基礎.
假設我們現在運行的是a.php(做為現在的主流開發語言)這個文件. 但是我在程序中又請求WEB伺服器運行另一個b.php(做為現在的主流開發語言)
那麼這兩個文件將是同時執行的.
(PS: 一個鏈接請求發送之後, WEB伺服器就會執行它, 而不管客戶端是否已經退出)
有些時候, 我們想運行的不是另一個文件, 而是本文件中的一部分代碼.該怎麼辦呢?
其實可是通過參數來控制a.php(做為現在的主流開發語言)來運行哪一段程序.
下面看一個例子:
//a.php(做為現在的主流開發語言)

php(做為現在的主流開發語言)代碼:--------------------------------------------------------------------------------
<?php(做為現在的主流開發語言)
function runThread()
{
$fp = fsockopen(localhost, 80, $errno, $errmsg);

fputs($fp, "GET /a.php(做為現在的主流開發語言)?act=b "); //這里的第二個參數是HTTP協議中規定的請求頭
//不明白的請看RFC中的定義

fclose($fp);
}
function a()
{
$fp = fopen(result_a.log, w);
fputs($fp, Set in . Date(h:i:s, time()) . (double)microtime() . " ");

fclose($fp);
}
function b()
{
$fp = fopen(result_b.log, w);
fputs($fp, Set in . Date(h:i:s, time()) . (double)microtime() . " ");

Ⅵ php中如何獲得當前時間

<?php echo date("Y-m-d h:i:s"); ?> 格式參數如下 a - "am" 或 "pm" A - "AM" 或 "PM" B - Swatch Internet Time(【譯者注】參見 http://swatch.com/alu_beat/fs_itime.html) d - 月份中的第幾天,有前導零的 2 位數字,例如 "01" to "31" D - 星期中的第幾天,文本表示,3 個字母,例如 "Fri" F - 月份,完整的文本格式,例如 "January" g - 小時,12 小時格式,沒有前導零,例如 "1" 到 "12" G - 小時,24 小時格式,沒有前導零,例如 "0" 到 "23" h - 小時,12 小時格式,例如 "01" 到 "12" H - 小時,24 小時格式,例如 "00" 到 "23" i - 分鍾,例如 "00" 到 "59" I(「i」的大寫的字母)- 如果是夏令時則為 "1",否則為 "0" j - 月份中的第幾天,沒有前導零,例如 "1" 到 "31" l(「L」的小寫字母)- 星期中的第幾天,完整的文本格式,例如 "Friday" L - 布爾值表示是否為閏年,例如 "0" 或者 "1" m - 月份,例如 "01" to "12" M - 月份,文本表示,3 個字母,例如 "Jan" n - 月份,沒有前導零,例如 "1" 到 "12" O - 與格林威治時間相差的小時數,例如 "+0200" r - RFC 822 格式的日期,例如 "Thu, 21 Dec 2000 16:01:07 +0200"(PHP 4.0.4新增) s - 秒數,例如 "00" 到 "59" S - 每月天數後面的英文後綴,2 個字元,例如 "st","nd","rd" 或者 "th" t - 給定月份所應有的天數,例如 "28" 到 "31" T - 本機所在的時區,例如 "EST" 或 "MDT"(【譯者注】在 Windows 下為完整文本格式,例如「Eastern Standard Time」,中文版會顯示「中國標准時間」。) U - 從 Unix 紀元(January 1 1970 00:00:00 GMT)開始至今的秒數 w - 星期中的第幾天,數字表示,例如 "0"(星期天)到 "6" (Saturday) W - ISO-8601 格式年份中的第幾周,每周從星期一開始(PHP 4.1.0 新加的) Y - 年份,4 位數字,例如 "1999" y - 年費,2 位數字,例如 "99" z - 年份中的第幾天,例如 "0" 到 "365" Z - 時差偏移量的秒數(例如 "-43200" 到 "43200")。UTC 西邊的時區偏移量總是負的,UTC 東邊的時區偏移量總是正的。

Ⅶ php 怎麼把時間轉換成rfc3339

date(DATE_RFC3339)

Ⅷ php中http請求頭有什麼內容,由什麼組成

PHP中一般採用getallheaders來獲取頭部,但事實上,有些模式下是獲取不到的(以前真沒有注意過在fastcgi下這個函數不能用)
在PHP里,想要得到所有的HTTP請求頭,可以使用getallheaders方法,不過此方法並不是在任何環境下都存在,比如說,你使用fastcgi方式運行PHP的話,就沒有這個方法,所以說我們還需要考慮別的方法,幸運的是$_SERVER里有我們想要的東西,它裡面鍵名以HTTP_開頭的就是HTTP請求頭:
$headers = array();
foreach ($_SERVER as $key => $value) {
if ('HTTP_' == substr($key, 0, 5)) {
$headers[str_replace('_', '-', substr($key, 5))] = $value;
}
}
代碼很簡單,需要說明的是RFC里明確指出了信息頭的名字是不區分大小寫的。
不過並不是所有的HTTP請求頭都是以HTTP_開頭的的鍵的形式存在與$_SERVER里,比如說Authorization,Content-Length,Content-Type就不是這樣,所以說為了取得所有的HTTP請求頭,還需要加上下面這段代碼:
if (isset($_SERVER['PHP_AUTH_DIGEST'])) {
$header['AUTHORIZATION'] = $_SERVER['PHP_AUTH_DIGEST']);
} elseif (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
$header['AUTHORIZATION'] = base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $_SERVER['PHP_AUTH_PW']));
}
if (isset($_SERVER['CONTENT_LENGTH'])) {
$header['CONTENT-LENGTH'] = $_SERVER['CONTENT_LENGTH'];
}
if (isset($_SERVER['CONTENT_TYPE'])) {
$header['CONTENT-TYPE'] = $_SERVER['CONTENT_TYPE'];
}

Ⅸ PHP如何使用socket發送郵件,知識要點是什麼

需要了解一下發送郵件的協議 如 smtp, emstp 是如何會話的,郵件格式,和郵件編碼規則
當然最好還是要了解一下 socket 通信,若這些都知道的話,那剩下編碼應不是問題了

郵件編碼和格式可以參考 RFC821,RFC1869, RFC2821 等相關文檔, 裡面有詳細的說明

文檔可到
http://www.rfc.net
http://www.ietf.org
等網站去找

http://www.cnpaf.net(中國協議分析網)對部分RFC文檔進行了翻譯,E文不是很好的話可到上面去找找

若只是用的話,不建議自己去寫,網上很多成熟開源 如 PHPMailer 等,學習的話可以去練練

Ⅹ PHP的常用系統函數有哪些

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=」」; //密碼字典
$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()+(50*24*60*60); //計算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)/(24*60*60); //根據時間戳計算出相差的天數
③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時間戳。

熱點內容
安卓輔助腳本如何寫 發布:2025-01-15 13:42:50 瀏覽:123
壓縮褲的穿法 發布:2025-01-15 13:39:24 瀏覽:314
支付寶如何設支付密碼 發布:2025-01-15 13:39:24 瀏覽:256
ea編程入門 發布:2025-01-15 13:30:11 瀏覽:412
應繳費檔次配置異常怎麼回事 發布:2025-01-15 13:20:34 瀏覽:617
成都php招聘 發布:2025-01-15 13:12:16 瀏覽:381
怎麼調用伺服器資料庫 發布:2025-01-15 13:06:25 瀏覽:656
人人網設置訪問許可權 發布:2025-01-15 13:02:06 瀏覽:563
崩壞學園2腳本 發布:2025-01-15 12:58:43 瀏覽:459
我的世界伺服器等級如何升 發布:2025-01-15 12:45:55 瀏覽:689