HP 是一種創建動態交互性站點的強有力的服務器端腳本語言。
PHP 是免費的,并且使用非常廣泛。同時,對于像微軟 ASP 這樣的競爭者來說,PHP 無疑是另一種高效率的選項。
適用于PHP初學者的學習線路和建議
PHP 開發工具推薦
PHP 在線工具
通過實例學習 PHP
我們的 PHP 在線實例讓您能夠更簡單的學習 PHP,實例中包含了 PHP 的源碼及運行結果。
實例
<!DOCTYPE html>
<html>
<body>
<?php
echo "Hello World!";
?>
</body>
</html>
運行實例 ?
PHP 入門
PHP 參考手冊
PHP 函數的完整參考手冊:
Array 函數
Calendar 函數
cURL 函數
Date 函數
Directory 函數
Error 函數
Filesystem 函數
Filter 函數
FTP 函數
HTTP 函數
LibXML 函數
Mail 函數
Math 函數
Misc 函數
MySQLi 函數
SimpleXML 函數
String 函數
XML Parser 函數
Zip 函數
、下載nginx和php的程序包
1.NGINX官網下載
2.PHP官網下載
二、安裝和配置nginx和php
1. 將nginx解壓到指定目錄下:
a. 運行nginx根目錄下的nginx.exe
b. 打開瀏覽器訪問本地IP,
c. 看看是否出現“Welcome to nginx!”,出現的證明已經啟動成功了。
d. 沒有啟動的話,看看80端口有占用沒。
nginx命令:
重新加載配置文件:nginx -s reload;
退出:nginx -s stop;
2. 將php和nginx解壓到指定目錄下
a. php根目錄下的php.ini-recommended文件復制一份并改名為php.ini,用文本編輯器將它打開。(具體配置信息請參考文件php-示例.ini)
i. 將 ;extension_dir="ext"改成extension_dir="./ext"
注意去掉前面的”;“。
ii. 將;cgi.force_redirect=1前面的”;“去掉。
iii. 將;extension=php_curl.dll前面的”;“去掉。
iv. 將;extension=php_gd2.dll前面的”;“去掉。
v. 將;extension=php_mbstring.dll前面的”;“去掉。
vi. 將;extension=php_mysqli.dll前面的”;“去掉。
vii. 將;extension=php_openssl.dll前面的”;“去掉。
viii. 將;extension=php_pdo_mysql.dll前面的”;“去掉。
b. 在根目錄下新加文件php-cgi.vbs在里面填寫以下內容:
set wscriptObj=CreateObject("Wscript.Shell")
wscriptObj.run "php-cgi -b 127.0.0.1:9000",0
雙擊php-cgi.vbs文件啟動php
3. 在\nginx\html下新建一個phpinfo.php在里面填寫以下內容:
<?php phpinfo(); ?>
4. 訪問url/phpinfo.php
5. 出現如下的信息就說明php已經成功安裝:
三、部署項目
1.打開/nginx/conf下的nginx.conf文件來配置nginx(具體配置信息請參考文件 nginx-示例.conf)
注意:兩個server端口號一樣時需要另外配置域名;
host文件地址:C:\Windows\System32\drivers\etc
host文件中添加自己需要的域名
希望我的分享可以幫助到你,如果你在內容技術上遇到難題,可以+關注■@主引教程 ,反饋給我們。我們會及時回復,如果有那些內容有誤可以直接提出來,我們會及時糾正,謝謝來訪。
、PHP配置文件中和上傳文件有關的選項
file_uploads=on 設置php腳本是否可以接受HTTP文件上傳
memory_limit=8M 設置腳本可以分配的最大內存量, 防止失控的腳本獨占服務器內存
upload_max_filesize=200M 限制php處理上傳文件大小的最大值, 此值必須小于post_max_size的值
最大不要超過服務器的內存
upload_tmp_dir=c:/uploads/ 上傳文件存放的臨時路徑(默認值:使用操作系統的臨時目錄), 該臨時文件的有效期就是腳本周期:
post_max_size=250M 限制通過post方法可以接受信息的最大值
此值除了包含上傳文件的大小, 還包含表單中的數據, 因此此值必須大于upload_max_filesize
限制文件上傳的兩個參數:
post_max_size=150M
upload_max_filesize=100M
post_max_size 必須大于 upload_max_filesize
max_execution_time PHP執行的最大時間
max_input_time php 解析post/get數據所用的最大時間
如何獲取服務器能夠上傳的文件大小
<?php
function get_upload_max_size(){
return min(intval(get_cfg_var('upload_max_filesize')),intval(get_cfg_var('post_max_size')),intval(get_cfg_var('memory_limit')));
}
echo get_upload_max_size(); //3200M
二、上傳表單需要的注意事項
1. 如果有文件上傳操作表單的提交方法必須 HTTP post
2. 表單上傳需要使用type為file的表
3. enctype="multipart/form-data" 只有文件上傳時才使用這個值, 用來指定表單編碼的數據方式, 讓服務器知道, 我們要傳遞
一個文件并帶有常規的表單信息。
4. 建議添加一個 MAX_FILE_SIZE 隱藏表單, 值的單位也是字節
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
三、PHP處理上傳的數據
$_POST 接收非上傳的數據
如果是文件上傳的數據則使用 $_FILES處理上傳的文件
<?php
//step 1 使用$_FILES['pic']["error"] 檢查錯誤
if($_FILES["pic"]["error"] > 0){
switch($_FILES["pic"]["error"]) {
case 1:
echo "上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值<br>";
break;
case 2:
echo "上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值";
break;
case 3:
echo "文件只有部分被上傳";
break;
case 4:
echo "沒有文件被上傳";
break;
default:
echo "末知錯誤";
}
exit;
}
$maxsize=5000000; //50k
//step 2 使用$_FILES["pic"]["size"] 限制大小 單位字節 2M=2000000
if($_FILES["pic"]["size"] > $maxsize ) {
echo "上傳的文件太大,不能超過{$maxsize}字節";
exit;
}
//step 3 使用$_FILES["pic"]["type"]或是文件的擴展名 限制類型 MIME image/gif image/png gif png jpg
/* list($dl, $xl)=explode("/", $_FILES["pic"]["type"]);
if($dl!="image"){
echo "請上傳一個圖片,不充許其它類型文件";
exit;
}
*/
//$hz=strrchr($_FILES["pic"]["type"], "."); 后綴名含有"."
$allowtype=array("png", "gif", "jpg", "jpeg");
$arr=explode(".", $_FILES["pic"]["name"]);
$hz=$arr[count($arr)-1];
if(!in_array($hz, $allowtype)){
echo "這是不充許的類型";
exit;
}
//step 4 將讓傳后的文件名改名
$filepath="./uploads/"; //文件上傳不要采用根路徑 $filepath="/uploads/", 否則會報錯
$randname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100, 999).".".$hz;
//將臨時位置的文件移動到指定的目錄上即可
if(is_uploaded_file($_FILES["pic"]["tmp_name"])){
if(move_uploaded_file($_FILES["pic"]["tmp_name"], $filepath.$randname)){
echo "上傳成功";
}else{
echo "上傳失敗";
}
}else{
echo "不是一個上傳文件";
}
多文件上傳結構
多個文件上傳后$_FILES 數組結構圖
Array(
[myfile]=>Array(
[name]=>Array( //$_FILES["myfile"]["name"]存儲所有上傳文件的內容
[0]=>Rav.ini //$_FILES["myfile"]["name"][0]第一個上傳文件的名稱
[1]=>msgsocm.log //$_FILES["myfile"]["name"][1]第二個上傳文件的名稱
[2]=>NOTEPAD.EXE) //$_FILES["myfile"]["name"][2]第三個上傳文件的名稱
[type]=>Array( //$_FILES["myfile"]["type"]存儲所有上傳文件的類型
[0]=>application/octet-stream //$_FILES["myfile"]["type"][0]第一個上傳文件的類型
[1]=>application/octet-stream //$_FILES["myfile"]["type"][1]第二個上傳文件的類型
[2]=>application/octet-stream) //$_FILES["myfile"]["type"][2]第三個上傳文件的類型
[tmp_name]=>Array(
[0]=>C:/WINDOWS/Temp/phpAF.tmp
[1]=>C:/WINDOWS/Temp/phpB0.tmp
[2]=>C:/WINDOWS/Temp/phpB1.tmp)
[error]=>Array(
[0]=>0
[1]=>0
[2]=>0)
[size]=>Array(
[0]=>64
[1]=>1350
[2]=>66560))
)
實例:
<html>
<head>
<meta charset="utf-8">
<title>index_uploads</title>
</head>
<body>
<form action="uploads.php" method="post" enctype="multipart/form-data">
<input type="file" name="file[]">
<br>
<input type="file" name="file[]">
<br>
<input type="submit" value="uploads">
</form>
</body>
</html>
<?php
header("content-type:text/html;charset=utf-8");
echo "<pre>";
print_r($_FILES);
echo "</pre>";
$count=count($_FILES['file']['name']);
for ($i=0; $i < $count; $i++) {
$tmpfile=$_FILES['file']['tmp_name'][$i];
$filefix=array_pop(explode(".", $_FILES['file']['name'][$i]));
$dstfile="uploads/files/".time()."_".mt_rand().".".$filefix;
if (move_uploaded_file($tmpfile, $dstfile)) {
echo "<script>alert('succeed!');window.location.href='index_uploads.php';</script>";
} else {
echo "<script>alert('fail!');window.location.href='index_uploads.php';</script>";
}
}
?>
相關函數
is_uploaded_file() 判斷文件是否是通過 HTTP POST 上傳的
bool is_uploaded_file ( string $filename )
move_uploaded_file() 將上傳的文件移動到新位置
bool move_uploaded_file ( string $filename , string $destination )
$filename $_FILES["name"]["tmp_name"]
$destination 移動文件到這個位置(包含文件的路徑和文件名)
注意: 上傳文件的腳本的所有者一定要有"w"的權限;
大文件上傳時延長上傳時間:
@set_time_limit(0);
新建表單
<form action='deal.php' method='post' enctype='multipart/form-data'>
選擇頭像:<input type='file' name='file' />
<hr />
<input type='submit' name='submit' value='上傳' />
</form>
deal.php
<?php
//1、設置響應頭信息
header('Content-type:text/html; charset=utf-8');
//2、獲取上傳文件信息
if($_FILES['file']['size'] > 0) {
$file=$_FILES['file']['name'];
$filename=getRandName($file);
//3、把臨時文件上傳到uploads文件夾下(move_uploaded_file函數)
if(move_uploaded_file($_FILES['file']['tmp_name'],'uploads/'.$filename)) {
echo '上傳成功';
} else {
echo '上傳失敗';
}
}
//定義一個函數,用于獲取隨機文件
function getRandName($file) {
//定義一個變量,用于接收新名稱
$newname=date('YmdHis');
//定義一個字符串
$str='abcdefghijklmnopqrstuvwxyz';
//隨機取出其中6個字符
for($i=0;$i<6;$i++) {
$newname .=$str[mt_rand(0,strlen($str)-1)];
}
//返回生成后的新文件名稱
return $newname . strrchr($file,'.');
}
?>
多維$_FILES['uploadFile']數組進行轉換
foreach($_FILES['uploadFile'] as $k=>$v){
foreach($v as $key=>$value){
if($key==$key){
$arr[$key][$k]=$value;
}
}
}
echo "<pre>";
print_r($arr);
echo "</pre>";
原數組的格式
Array
(
[name]=> Array
(
[0]=> laravel框架.txt
[1]=> ecshop分析.txt
[2]=> 注釋.txt
)
[type]=> Array
(
[0]=> text/plain
[1]=> text/plain
[2]=> text/plain
)
[tmp_name]=> Array
(
[0]=> C:\Windows\php562C.tmp
[1]=> C:\Windows\php562D.tmp
[2]=> C:\Windows\php563E.tmp
)
[error]=> Array
(
[0]=> 0
[1]=> 0
[2]=> 0
)
[size]=> Array
(
[0]=> 12506
[1]=> 138
[2]=> 2094
)
)
轉換后數組格式:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。