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

phplasterror

發布時間: 2023-05-14 14:45:35

1. socket在php主要是什麼作用用在哪些方面

PHP 使用Berkley的socket庫來創建它的連接。你可以知道socket只不過是一個數據結構。你使用這個socket數據結構去開始一個客戶端和伺服器之間的會話。這個伺服器是一直在監聽准備產生一個新的會話。當一個客戶端連接伺服器,它就打開伺服器正在進行監聽的一個埠進行會話。這時,伺服器端接受客戶端的連接請求,那麼就進行一次循環。現在這個客戶端就能夠發送信息到伺服器,伺服器也能發送信息給客戶端。
產生一個Socket,你需要三個變數:一個協議、一個socket類型和一個公共協議類型。產生一個socket有三種協議供選擇,繼續看下面的內容來獲取詳細的協議內容。
定義一個公共的協議類型是進行連接一個必不可少的元素。下面的表我們看看有那些公共的協議類型。

表一:協議
名字/常量 描述
AF_INET 這是大多數用來產生socket的協議,使用TCP或UDP來傳輸,用在IPv4的地址
AF_INET6 與上面類似,不過是來用在IPv6的地址
AF_UNIX 本地協議,使用在Unix和Linux系統上,它很少使用,一般都是當客戶端和伺服器在同一台及其上的時候使用
表二:Socket類型
名字/常量 描述
SOCK_STREAM 這個協議是按照順序的、可靠的、數據完整的基於位元組流的連接。這是一個使用最多的socket類型,這個socket是使用TCP來進行傳輸。
SOCK_DGRAM 這個協議是無連接的、固定長度的傳輸調用。該協議是不可靠的,使用UDP來進行它的連接。
SOCK_SEQPACKET 這個協議是雙線路的、可靠的連接,發送固定長度的數據包進行傳輸。必須把這個包完整的接受才能進行讀取。
SOCK_RAW 這個socket類型提供單一的網路訪問,這個socket類型使用ICMP公共協議。(ping、traceroute使用該協議)
SOCK_RDM 這個類型是很少使用的,在大部分的操作系統上沒有實現,它是提供給數據鏈路層使用,不保證數據包的順序

表三:公共協議
名字/常量 描述
ICMP 互聯網控制消息協議,主要使用在網關和主機上,用來檢查網路狀況和報告錯誤信息
UDP 用戶數據報文協議,它是一個無連接,不可靠的傳輸協議
TCP 傳輸控制協議,這是一個使用最多的可靠的公共協議,它能保證數據包能夠到達接受者那兒,如果在傳輸過程中發生錯誤,那麼它將重新發送出錯數據包。

現在你知道了產生一個socket的三個元素,那麼我們就在php中使用socket_create()函數來產生一個socket。這個 socket_create()函數需要三個參數:一個協議、一個socket類型、一個公共協議。socket_create()函數運行成功返回一個包含socket的資源類型,如果沒有成功則返回false。
Resourece socket_create(int protocol, int socketType, int commonProtocol);

現在你產生一個socket,然後呢?php提供了幾個操縱socket的函數。你能夠綁定socket到一個IP,監聽一個socket的通信,接受一個socket;現在我們來看一個例子,了解函數是如何產生、接受和監聽一個socket。

<?php
$commonProtocol = getprotobyname(「tcp」);
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, 『localhost』, 1337);
socket_listen($socket);
// More socket functionality to come
?>

上面這個例子產生一個你自己的伺服器端。例子第一行,
$commonProtocol = getprotobyname(「tcp」);
使用公共協議名字來獲取一個協議類型。在這里使用的是TCP公共協議,如果你想使用UDP或者ICMP協議,那麼你應該把getprotobyname() 函數的參數改為「udp」或「icmp」。還有一個可選的辦法是不使用getprotobyname()函數而是指定SOL_TCP或SOL_UDP在 socket_create()函數中。
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
例子的第二行是產生一個socket並且返回一個socket資源的實例。在你有了一個socket資源的實例以後,你就必須把socket綁定到一個IP地址和某一個埠上。
socket_bind($socket, 『localhost』, 1337);
在這里你綁定socket到本地計算機(127.0.0.1)和綁定socket到你的1337埠。然後你就需要監聽所有進來的socket連接。
socket_listen($socket);
在第四行以後,你就需要了解所有的socket函數和他們的使用。

表四:Socket函數
函數名 描述
socket_accept() 接受一個Socket連接
socket_bind() 把socket綁定在一個IP地址和埠上
socket_clear_error() 清除socket的錯誤或者最後的錯誤代碼
socket_close() 關閉一個socket資源
socket_connect() 開始一個socket連接
socket_create_listen() 在指定埠打開一個socket監聽
socket_create_pair() 產生一對沒有區別的socket到一個數組里
socket_create() 產生一個socket,相當於產生一個socket的數據結構
socket_get_option() 獲取socket選項
socket_getpeername() 獲取遠程類似主機的ip地址
socket_getsockname() 獲取本地socket的ip地址
socket_iovec_add() 添加一個新的向量到一個分散/聚合的數組
socket_iovec_alloc() 這個函數創建一個能夠發送接收讀寫的iovec數據結構
socket_iovec_delete() 刪除一個已經分配的iovec
socket_iovec_fetch() 返回指定的iovec資源的數據
socket_iovec_free() 釋放一個iovec資源
socket_iovec_set() 設置iovec的數據新值
socket_last_error() 獲取當前socket的最後錯誤代碼
socket_listen() 監聽由指定socket的所有連接
socket_read() 讀取指定長度的數據
socket_readv() 讀取從分散/聚合數組過來的數據
socket_recv() 從socket里結束數據到緩存
socket_recvfrom() 接受數據從指定的socket,如果沒有指定則默認當前socket
socket_recvmsg() 從iovec里接受消息
socket_select() 多路選擇
socket_send() 這個函數發送數據到已連接的socket
socket_sendmsg() 發送消息到socket
socket_sendto() 發送消息到指定地址的socket
socket_set_block() 在socket里設置為塊模式
socket_set_nonblock() socket里設置為非塊模式
socket_set_option() 設置socket選項
socket_shutdown() 這個函數允許你關閉讀、寫、或者指定的socket
socket_strerror() 返回指定錯誤號的詳細錯誤
socket_write() 寫數據到socket緩存
socket_writev() 寫數據到分散/聚合數組

(注: 函數介紹刪減了部分原文內容,函數詳細使用建議參考英文原文,或者參考PHP手冊)

以上所有的函數都是PHP中關於socket的,使用這些函數,你必須把你的socket打開,如果你沒有打開,請編輯你的php.ini文件,去掉下面這行前面的注釋:
extension=php_sockets.dll
如果你無法去掉注釋,那麼請使用下面的代碼來載入擴展庫:
<?php
if(!extension_loaded(『sockets』))
{
if(strtoupper(substr(PHP_OS, 3)) == 「WIN」)
{
dl(『php_sockets.dll』);
}
else
{
dl(『sockets.so』);
}
}
?>

如果你不知道你的socket是否打開,那麼你可以使用phpinfo()函數來確定socket是否打開。你通過查看phpinfo信息了解socket是否打開。如下圖:

查看phpinfo()關於socket的信息

◆產生一個伺服器

現在我們把第一個例子進行完善。你需要監聽一個指定的socket並且處理用戶的連接。

<?php
$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, 'localhost', 1337);
socket_listen($socket);
// Accept any incoming connections to the server
$connection = socket_accept($socket);
if($connection)
{
socket_write($connection, "You have connected to the socket.../n/r");
}
?>

你應該使用你的命令提示符來運行這個例子。理由是因為這里將產生一個伺服器,而不是一個Web頁面。如果你嘗試使用Web瀏覽器來運行這個腳本,那麼很有可能它會超過30秒的限時。你可以使用下面的代碼來設置一個無限的運行時間,但是還是建議使用命令提示符來運行。
set_time_limit(0);
在你的命令提示符中對這個腳本進行簡單測試:
Php.exe example01_server.php
如果你沒有在系統的環境變數中設置php解釋器的路徑,那麼你將需要給php.exe指定詳細的路徑。當你運行這個伺服器端的時候,你能夠通過遠程登陸(telnet)的方式連接到埠1337來測試這個伺服器。如下圖:

上面的伺服器端有三個問題:1. 它不能接受多個連接。2. 它只完成唯一的一個命令。3. 你不能通過Web瀏覽器連接這個伺服器。
這個第一個問題比較容易解決,你可以使用一個應用程序去每次都連接到伺服器。但是後面的問題是你需要使用一個Web頁面去連接這個伺服器,這個比較困難。你可以讓你的伺服器接受連接,然後些數據到客戶端(如果它一定要寫的話),關閉連接並且等待下一個連接。
在上一個代碼的基礎上再改進,產生下面的代碼來做你的新伺服器端:

<?php
// Set up our socket
$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, 'localhost', 1337);
socket_listen($socket);
// Initialize the buffer
$buffer = "NO DATA";
while(true)
{
// Accept any connections coming in on this socket

$connection = socket_accept($socket);
printf("Socket connected/r/n");
// Check to see if there is anything in the buffer
if($buffer != "")
{
printf("Something is in the buffer...sending data.../r/n");
socket_write($connection, $buffer . "/r/n");
printf("Wrote to socket/r/n");
}
else
{
printf("No Data in the buffer/r/n");
}
// Get the input
while($data = socket_read($connection, 1024, PHP_NORMAL_READ))
{
$buffer = $data;
socket_write($connection, "Information Received/r/n");
printf("Buffer: " . $buffer . "/r/n");
}
socket_close($connection);
printf("Closed the socket/r/n/r/n");
}
?>

這個伺服器端要做什麼呢?它初始化一個socket並且打開一個緩存收發數據。它等待連接,一旦產生一個連接,它將列印「Socket connected」在伺服器端的屏幕上。這個伺服器檢查緩沖區,如果緩沖區里有數據,它將把數據發送到連接過來的計算機。然後它發送這個數據的接受信息,一旦它接受了信息,就把信息保存到數據里,並且讓連接的計算機知道這些信息,最後關閉連接。當連接關閉後,伺服器又開始處理下一次連接。(翻譯的爛,附上原文)
This is what the server does. It initializes the socket and the buffer that you use to receive
and send data. Then it waits for a connection. Once a connection is created it prints
「Socket connected」 to the screen the server is running on. The server then checks to see if
there is anything in the buffer; if there is, it sends the data to the connected computer.
After it sends the data it waits to receive information. Once it receives information it stores
it in the data, lets the connected computer know that it has received the information, and
then closes the connection. After the connection is closed, the server starts the whole
process again.

◆產生一個客戶端

處理第二個問題是很容易的。你需要產生一個php頁連接一個socket,發送一些數據進它的緩存並處理它。然後你又個處理後的數據在還頓,你能夠發送你的數據到伺服器。在另外一台客戶端連接,它將處理那些數據。
To solve the second problem is very easy. You need to create a PHP page that connects to
a socket, receive any data that is in the buffer, and process it. After you have processed the
data in the buffer you can send your data to the server. When another client connects, it
will process the data you sent and the client will send more data back to the server.

下面的例子示範了使用socket:

<?php
// Create the socket and connect
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$connection = socket_connect($socket,』localhost』, 1337);
while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ))
{
if($buffer == 「NO DATA」)
{
echo(「<p>NO DATA</p>」);
break;
}
else
{
// Do something with the data in the buffer
echo(「<p>Buffer Data: 「 . $buffer . 「</p>」);
}
}
echo(「<p>Writing to Socket</p>」);
// Write some test data to our socket
if(!socket_write($socket, 「SOME DATA/r/n」))
{
echo(「<p>Write failed</p>」);
}
// Read any response from the socket
while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ))
{
echo(「<p>Data sent was: SOME DATA<br> Response was:」 . $buffer . 「</p>」);
}
echo(「<p>Done Reading from Socket</p>」);
?>

這個例子的代碼演示了客戶端連接到伺服器。客戶端讀取數據。如果這是第一時間到達這個循環的首次連接,這個伺服器將發送「NO DATA」返回給客戶端。如果情況發生了,這個客戶端在連接之上。客戶端發送它的數據到伺服器,數據發送給伺服器,客戶端等待響應。一旦接受到響應,那麼它將把響應寫到屏幕上。

2. php系統函數socket_connect信息亂碼

這種情況基森穗雀本是編碼的問族悔題了此早,可以排查。

3. 請教php大神,php如何實現點擊頁面上的一個按鈕發送socket的tcp數據

1.參考資料

socket_create()函數需要三個參數:一個協議、一個socket類型、一個公共協議。socket_create()函數運行成功返回一個

包含socket的資源類型,如果沒有成功則返回false。

Socket函數
函數名 描述
函數名 描述
socket_accept() 接受一個Socket連接
socket_bind() 把socket綁定在一個IP地址和埠上
socket_clear_error() 清除socket的錯誤或最後的錯誤代碼
socket_close() 關閉一個socket資源
socket_connect() 開始一個socket連接
socket_create_listen() 在指定埠打開一個socket監聽
socket_create_pair() 產生一對沒有差別的socket到一個數組里
socket_create() 產生一個socket,相當於產生一個socket的數據結構
socket_get_option() 獲取socket選項
socket_getpeername() 獲取遠程類似主機的ip地址
socket_getsockname() 獲取本地socket的ip地址
socket_iovec_add() 添加一個新的向量到一個分散/聚合的數組
socket_iovec_alloc() 這個函數創建一個能夠發送接收讀寫的iovec數據結構
socket_iovec_delete() 刪除一個已分配的iovec
socket_iovec_fetch() 返回指定的iovec資源的數據
socket_iovec_free() 釋放一個iovec資源
socket_iovec_set() 設置iovec的數據新值
socket_last_error() 獲取當前socket的最後錯誤代碼
socket_listen() 監聽由指定socket的所有連接
socket_read() 讀取指定長度的數據
socket_readv() 讀取從分散/聚合數組過來的數據
socket_recv() 從socket里結束數據到緩存
socket_recvfrom() 接受數據從指定的socket,如果沒有指定則默認當前socket
socket_recvmsg() 從iovec里接受消息
socket_select() 多路選擇
socket_send() 這個函數發送數據到已連接的socket
socket_sendmsg() 發送消息到socket
socket_sendto() 發送消息到指定地址的socket
socket_set_block() 在socket里設置為塊模式
socket_set_nonblock() socket里設置為非塊模式
socket_set_option() 設置socket選項
socket_shutdown() 這個函數允許你關閉讀、寫、或指定的socket
socket_strerror() 返回指定錯誤號的周詳錯誤
socket_write() 寫數據到socket緩存
socket_writev() 寫數據到分散/聚合數組

2.代碼:

<?php
$sendStr='30323034033033';//16進制數據
$sendStrArray=str_split(str_replace('','',$sendStr),2);//將16進制數據轉換成兩個一組的數組
$socket=socket_create(AF_INET,SOCK_STREAM,getprotobyname("tcp"));//創建Socket
if(socket_connect($socket,"192.168.1.100",8080)){//連接
for($j=0;$j<count($sendStrArray);$j++){
socket_write($socket,chr(hexdec($sendStrArray[$j])));//逐組數據發送
}
$receiveStr="";
$receiveStr=socket_read($socket,1024,PHP_BINARY_READ);//採用2進制方式接收數據
$receiveStrHex=bin2hex($receiveStr);//將2進制數據轉換成16進制
echo"client:".$receiveStrHex;
}
socket_close($socket);//關閉Socket
?>

4. 關於php中socket的問題:

這是socket的服務端的代碼,監聽的ip地址是192.168.168.121,埠號為8528


請檢查以下幾點

  1. 這個ip是不是代碼所在伺服器的ip,一般監測內網ip,如127.0.0.1

  2. 埠號是否被使用,可以使用cmd命令 netstat -ano|findstr 8528 查找埠號為8528的埠使用情況

  3. 如果要給在公網上使用,請使用公網ip,這樣可以外網使用

  4. 如果代碼不報錯可以試下telnet下你的埠號,看是否可以使用

    如 telnet 127.0.0.1 8528

解決方案

查看你電腦的ip地址,把上面代碼里「$address = '192.168.168.121';」這個ip地址換成「$address = '127.0.0.1';」或者你電腦的ip地址,再試試。

(ip地址改成127.0.0.1後,這段代碼在我電腦上可以使用)

5. php系統函數socket_connect信息亂碼

你要連接的伺服器沒開通對應的埠,或者有防火牆屏蔽了

6. php 的 socket如何判斷連接已經斷開

當連接斷開時,讀寫socket的函數會失敗。如socket_read()在讀取失敗時布爾值false。這時可以調用socket_last_error()和socket_strerror()函數得到錯誤代碼和錯誤信息。可以根據這個判斷失敗原因是否為連接斷開。

望採納~~

7. php判斷是否是json

這篇文章主要介紹了php判斷是否為json格式的方法,需要的朋友可以參考下
首先要記住json_encode返回的是字元串,而json_decode返回的是對象
判斷數據不是JSON格式:

復制代碼代碼如悉含下:

functionis_not_json($str){
return
is_null(json_decode($str));
}

判斷數據是合基陸慶法的json數據:(PHP版本大於5.3)

復制代碼代碼如下:

functionis_json($string){
www.jb51.net
json_decode($string);
return(json_last_error()==
JSON_ERROR_NONE);
}

json_last_error()函數返回數據編解碼搏握過程中發生的錯誤
注意:json編解碼所操作字元串必須是UTF8的
例子

復制代碼代碼如下:

/**
*解析json串
*@paramtype
$json_str
*@returntype
*/
functionanalyJson($json_str)
{
$json_str=str_replace('\\','',$json_str);
$out_arr=
array();
preg_match('/{.*}/',$json_str,$out_arr);
if(!empty($out_arr))
{
$result=json_decode($out_arr[0],TRUE);
}else{
return
FALSE;
}
return$result;
}

如果不是json則返回false

8. 求php同時上傳兩張圖片並根據時間存入資料庫!根據下面的代碼來修改!

我給你個簡單的吧 這個可以實現三個一起或廳桐上傳 這個是我自己用的 做了點調整
uploadCore.php 頁面代碼
<?php
/*
* @(#)UploadFile.php (beta) 2005/2/19
*
* exBlog上傳附件類,可同時處理用戶多個上傳文件。效驗文件有效性後存儲至指定目錄。
* 可返回上傳文件的相關有用信息供其它程序使用。(如文件名、類型、大小、保存路徑)
* 使用方法請見本類底部(UploadFile類使用注釋)信息。
*/
class UploadFile {

var $user_post_file = array(); //用戶上傳的文件
var $user_name_u = array();//username
//var $user_name_y = array(); //usertype
var $save_file_path; //存放用戶上傳文件的路徑
var $max_file_size; //文件最大尺寸
var $last_error; //記錄最後一次出錯信息
//默認允許用戶上傳的文件類型
var $allow_type = array('gif', 'jpg', 'png', 'zip', 'rar', 'txt', 'doc', 'pdf');
var $final_file_path; //最終保存的文件名

var $save_info = array(); //返回一組有用信息,用衫坦於提示用戶。

/**
* 構造函數,用與初始化相關信息,用戶待上傳文件、存儲路徑等
*
* @param Array $file 用戶上伏鎮傳的文件
* @param String $path 存儲用戶上傳文件的路徑
* @param Integer $size 允許用戶上傳文件的大小(位元組)
* @param Array $type 此數組中存放允計用戶上傳的文件類型
*/
function UploadFile($file, $uname, $path, $size = 2097152, $type = '') {
$this->user_name_u = $uname;
//$this->user_name_y = $utype;
$this->user_post_file = $file;
$this->save_file_path = $path;
$this->max_file_size = $size; //如果用戶不填寫文件大小,則默認為2M.
if ($type != '')
$this->allow_type = $type;
}
/**
* 存儲用戶上傳文件,檢驗合法性通過後,存儲至指定位置。
* @access public
* @return int 值為0時上傳失敗,非0表示上傳成功的個數。
*/
function upload() {

for ($i = 0; $i < count($this->user_post_file['name']); $i++) {
//如果當前文件上傳功能,則執行下一步。

if ($this->user_post_file['error'][$i] == 0) {

//取當前文件名、臨時文件名、大小、擴展名,後面將用到。
$userty = $this->user_name_y[$i];
$uuname = $this->user_name_u[$i];
$name = $this->user_post_file['name'][$i];
$tmpname = $this->user_post_file['tmp_name'][$i];
$size = $this->user_post_file['size'][$i];
$mime_type = $this->user_post_file['type'][$i];
$type = $this->getFileExt($this->user_post_file['name'][$i]);
//檢測當前上傳文件大小是否合法。
if (!$this->checkSize($size)) {
$this->last_error = "這個文件的大小太大了. 您上傳的文件名: ".$name;
$this->halt($this->last_error);
continue;
}

//檢測當前上傳文件擴展名是否合法。
if (!$this->checkuplod($type)) {

$this->last_error = "允許上傳文件類型: .".$type." 您上傳的文件名: ".$name;
$this->halt($this->last_error);
continue;
}
//檢測當前上傳文件是否非法提交。
if(!is_uploaded_file($tmpname)) {

$this->last_error = "文件非法提交. 您上傳的文件名: ".$name;
$this->halt($this->last_error);
continue;
}
//移動文件後,重命名文件用。
$basename = $this->getBaseName($name, ".".$type);
//移動後的文件名

$saveas = $basename."-".time().".".$type;

//$saveas = $basename.".".$type;
//組合新文件名再存到指定目錄下,格式:存儲路徑 + 文件名 + 時間 + 擴展名
$this->final_file_path = $this->save_file_path."/".$saveas;
if(!move_uploaded_file($tmpname, $this->final_file_path)) {

$this->last_error = $this->user_post_file['error'][$i];
$this->halt($this->last_error);
continue;
}
//存儲當前文件的有關信息,以便其它程序調用。
$this->save_info[] = array("uname" => $uuname,"name" => $name, "type" => $type,
"mime_type" => $mime_type,
"size" => $size, "saveas" => $saveas,
"path" => $this->final_file_path);
}
}

return count($this->save_info); //返回上傳成功的文件數目
}

/**
* 返回一些有用的信息,以便用於其它地方。
* @access public
* @return Array 返回最終保存的路徑
*/
function getSaveInfo() {
return $this->save_info;
}

/**
* 檢測用戶提交文件大小是否合法
* @param Integer $size 用戶上傳文件的大小
* @access private
* @return boolean 如果為true說明大小合法,反之不合法
*/
function checkSize($size) {
if ($size > $this->max_file_size) {
return false;
}
else {
return true;
}
}

/**
* 檢測用戶提交文件類型是否合法
* @access private
* @return boolean 如果為true說明類型合法,反之不合法
*/
function checkType($extension) {
foreach ($this->allow_type as $type) {
//echo "<pre>";
//print_r($type);
//print_r($extension);
$str=substr($extension['name'][0],strrpos($extension['name'][0],'.')+1);
//echo $str;
//exit();
if (strcasecmp($str, $type) == 0)
return true;
}
return false;
}

function checkuplod($extension) {
foreach ($this->allow_type as $type) {
//echo "<pre>";
//print_r($type);
//print_r($extension);
//$str=substr($extension['name'][0],strrpos($extension['name'][0],'.')+1);
//echo $str;
//exit();
if (strcasecmp($extension, $type) == 0)
return true;
}
return false;
}

/**
* 顯示出錯信息
* @param $msg 要顯示的出錯信息
* @access private
*/
function halt($msg) {
printf("<b><UploadFile Error:></b> %s <br>\n", $msg);
exit();
}

/**
* 取文件擴展名
* @param String $filename 給定要取擴展名的文件
* @access private
* @return String 返回給定文件擴展名
*/
function getFileExt($filename) {
$stuff = pathinfo($filename);
return $stuff['extension'];
}
/**
* 取給定文件文件名,不包括擴展名。
* eg: getBaseName("j:/hexuzhong.jpg"); //返回 hexuzhong
*
* @param String $filename 給定要取文件名的文件
* @access private
* @return String 返迴文件名
*/
function getBaseName($filename, $type) {
$basename = basename($filename, $type);
return $basename;
}
}
?>
調用和使用方法
$tmp=$Form;
require ('uploadCore.php');

//設置允許用戶上傳的文件類型。
$type = array('gif', 'jpg', 'png', 'zip', 'rar', 'txt');
//實例化上傳類,第一個參數為用戶上傳的文件組、第二個參數為存儲路徑、
//第三個參數為文件最大大小。如果不填則默認為2M
//第四個參數為充許用戶上傳的類型數組。如果不填則默認為gif, jpg, png, zip, rar, txt, doc, pdf
$upload = new UploadFile($user_upload_file,$user_name, $pathy, 500000, $type);
//print"<pre>";
//print_r($upload);
//上傳用戶文件,返回int值,為上傳成功的文件個數。
$num = $upload->upload();
if ($num != 0) {
//echo "上傳成功<br>";
$jeff_upload_info=$upload->getSaveInfo();
//取得文件的有關信息,文件名、類型、大小、路徑。用print_r()列印出來。
//print_r($jeff_upload_info['uname']);
//print"<pre>";
//print_r($jeff_upload_info);
//exit();
//格式為: Array
// (
// [0] => Array(
// [name] => example.txt
// [type] => txt
// [size] => 526
// [path] => j:/tmp/example-1108898806.txt
// )
// )

//獲得文件保存路徑或者其他的信息
for ($jeff_upload_success_num = 0; $jeff_upload_success_num < $num; $jeff_upload_success_num++)
{
$tmp['zz_upload_file'] = $jeff_upload_info[$jeff_upload_success_num]['uname'];
$tmp['zz_user_name'] = $jeff_upload_info[$jeff_upload_success_num]['name'];
$tmp['zz_user_uname'] = $jeff_upload_info[$jeff_upload_success_num]['saveas'];
$tmp['zz_size'] = $jeff_upload_info[$jeff_upload_success_num]['size'];
$tmp['zz_addtime'] = date("Y-m-d");
$tmp['zz_passtime'] = date("Y-m-d");
//print"<pre>";
//print_r($tmp);
$q_sql = data_insert($tmp,'hczb_zzwd');//插入資料庫類
//print_r($q_sql);
//$jeff_upload_success_url = "\r\n".'[img]'.$jeff_upload_info[$jeff_upload_success_num]['path'].'[/img]';
//$jeff_upload_success_img .= $jeff_upload_success_url; //獲得[img]代碼
}

if($q_sql)
{
echo "<script>window.location.href='third.php';</script>";
$_SESSION['f'] = 3;
}
else
{
echo "<script>alert('sorry,操作失敗');window.location.href='third.php';</script>";;
}

//echo $num."個文件上傳成功";
}
else {
echo "<script>alert('sorry,上傳失敗,允許上傳的格式是:'".$type."'');window.location.href='third.php';</script>";
}

表單調用:
<table width="91%" border="0" align="center" cellpadding="0" cellspacing="0" style="margin-top:12px;">

<tr>
<td valign="top" ><fieldset>
<legend><img src="images/third_11.jpg" /></legend>
<table width="98%" border="0" cellspacing="0" cellpadding="0" style="margin-top:12px;" align="center">
<tr>
<td class="tianjie"><table width="100%" border="0" cellspacing="0" cellpadding="0" >
<tr>
<td width="16%" align="center">附件序號 </td>
<td width="34%" align="center">附件名稱 </td>
<td width="43%" align="center">附件說明</td>
<td width="7%" align="center"> </td>

</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" >
<tr>
<td width="16%" align="center">附件一 </td>
<td width="38%" align="center"><input name="user_upload_file[]" type="file" class="bg" id="filename" size="16" /></td>
<td width="43%" align="center"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="10" align="right"><img src="images/input_l.gif" width="6" height="28" /></td>
<td width="120">
<input name="user_name[]" type="text" id="user_name" class="srk" size="35" onchange="clear_errors(document.all.dis_error_user_name,this);"/> </td>
<td width="9" align="left"><img src="images/input_r.gif" width="5" height="28" /></td>
</tr>
</table></td>
<td width="3%" align="center"> </td>

</tr>
</table>

<table width="100%" border="0" cellspacing="0" cellpadding="0" class="lx">
<tr>
<td width="16%" align="center">附件二 </td>
<td width="38%" align="center"><input name="user_upload_file[]" type="file" class="bg" id="filename" size="16" /></td>
<td width="43%" align="center"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="10" align="right"><img src="images/input_l.gif" width="6" height="28" /></td>
<td width="120">
<input name="user_name[]" type="text" id="user_name1" class="srk" size="35" onchange="clear_errors(document.all.dis_error_user_nameo,this);"/> </td>
<td width="9" align="left"><img src="images/input_r.gif" width="5" height="28" /></td>
</tr>
</table></td>
<td width="3%" align="center"> </td>

</tr>
</table>

<table width="100%" border="0" cellspacing="0" cellpadding="0" >
<tr>
<td width="16%" align="center">附件三 </td>
<td width="38%" align="center"><input name="user_upload_file[]" type="file" class="bg" id="filename" size="16" /></td>
<td width="43%" align="center"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="10" align="right"><img src="images/input_l.gif" width="6" height="28" /></td>
<td width="120">
<input name="user_name[]" type="text" id="user_name2" class="srk" size="35" onchange="clear_errors(document.all.dis_error_user_namet,this);"/> </td>
<td width="9" align="left"><img src="images/input_r.gif" width="5" height="28" /></td>
</tr>
</table></td>
<td width="3%" align="center"> </td>

</tr>
</table>

<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin:15px;">
<tr>
<td align="center"><input type="submit" name="sub" value=" " style="border:0px; width:166px; height:28px; background:url(images/third_19.jpg) no-repeat; cursor:hand" /></td>

</tr>
</table>

</td>
</tr>
</table>
</fieldset></td>
</tr>
</table>
有哪裡不明白的 M我 告訴你

9. php安裝的問題,無法載入 mysql 擴展,請檢查 PHP 配置

首先你需要將PHP安裝目錄下的php_mysql.dll和php_mysqli.dll(我的在D:\apptools\php5\ext目錄下)復制到c:\windows\system32目錄下,然後修改php.ini文件(需要放到c:\windows目錄下),關鍵是extension=php_mysql.dll 和extension_dir = "D:/apptools/php5/ext"。
我的配置是這樣的:

[PHP]

;;;;;;;;;;;
; WARNING ;
;;;;;;;;;;;
; This is the default settings file for new PHP installations.
; By default, PHP installs itself with a configuration suitable for
; development purposes, and *NOT* for proction purposes.
; For several security-oriented considerations that should be taken
; before going online with your site, please consult php.ini-recommended
; and http://php.net/manual/en/security.php.

;;;;;;;;;;;;;;;;;;;
; About php.ini ;
;;;;;;;;;;;;;;;;;;;
; This file controls many aspects of PHP's behavior. In order for PHP to
; read it, it must be named 'php.ini'. PHP looks for it in the current
; working directory, in the path designated by the environment variable
; PHPRC, and in the path that was defined in compile time (in that order).
; Under Windows, the compile-time path is the Windows directory. The
; path in which the php.ini file is looked for can be overridden using
; the -c argument in command line mode.
;
; The syntax of the file is extremely simple. Whitespace and Lines
; beginning with a semicolon are silently ignored (as you probably guessed).
; Section headers (e.g. [Foo]) are also silently ignored, even though
; they might mean something in the future.
;
; Directives are specified using the following syntax:
; directive = value
; Directive names are *case sensitive* - foo=bar is different from FOO=bar.
;
; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one
; of the INI constants (On, Off, True, False, Yes, No and None) or an expression
; (e.g. E_ALL & ~E_NOTICE), or a quoted string ("foo").
;
; Expressions in the INI file are limited to bitwise operators and parentheses:
; | bitwise OR
; & bitwise AND
; ~ bitwise NOT
; ! boolean NOT
;
; Boolean flags can be turned on using the values 1, On, True or Yes.
; They can be turned off using the values 0, Off, False or No.
;
; An empty string can be denoted by simply not writing anything after the equal
; sign, or by using the None keyword:
;
; foo = ; sets foo to an empty string
; foo = none ; sets foo to an empty string
; foo = "none" ; sets foo to the string 'none'
;
; If you use constants in your value, and these constants belong to a
; dynamically loaded extension (either a PHP extension or a Zend extension),
; you may only use these constants *after* the line that loads the extension.
;
;
;;;;;;;;;;;;;;;;;;;
; About this file ;
;;;;;;;;;;;;;;;;;;;
; All the values in the php.ini-dist file correspond to the builtin
; defaults (that is, if no php.ini is used, or if you delete these lines,
; the builtin defaults will be identical).

;;;;;;;;;;;;;;;;;;;;
; Language Options ;
;;;;;;;;;;;;;;;;;;;;

; Enable the PHP scripting language engine under Apache.
engine = On

; Enable compatibility mode with Zend Engine 1 (PHP 4.x)
zend.ze1_compatibility_mode = Off

; Allow the <? tag. Otherwise, only <?php and <script> tags are recognized.
; NOTE: Using short tags should be avoided when developing applications or
; libraries that are meant for redistribution, or deployment on PHP
; servers which are not under your control, because short tags may not
; be supported on the target server. For portable, redistributable code,
; be sure not to use short tags.
short_open_tag = On

; Allow ASP-style <% %> tags.
asp_tags = Off

; The number of significant digits displayed in floating point numbers.
precision = 12

; Enforce year 2000 compliance (will cause problems with non-compliant browsers)
y2k_compliance = On

; Output buffering allows you to send header lines (including cookies) even
; after you send body content, at the price of slowing PHP's output layer a
; bit. You can enable output buffering ring runtime by calling the output
; buffering functions. You can also enable output buffering for all files by
; setting this directive to On. If you wish to limit the size of the buffer
; to a certain size - you can use a maximum number of bytes instead of 'On', as
; a value for this directive (e.g., output_buffering=4096).
output_buffering = On

; You can redirect all of the output of your scripts to a function. For
; example, if you set output_handler to "mb_output_handler", character
; encoding will be transparently converted to the specified encoding.
; Setting any output handler automatically turns on output buffering.
; Note: People who wrote portable scripts should not depend on this ini
; directive. Instead, explicitly set the output handler using ob_start().
; Using this ini directive may cause problems unless you know what script
; is doing.
; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler"
; and you cannot use both "ob_gzhandler" and "zlib.output_compression".
; Note: output_handler must be empty if this is set 'On' !!!!
; Instead you must use zlib.output_handler.
;output_handler =

; Transparent output compression using the zlib library
; Valid values for this option are 'off', 'on', or a specific buffer size
; to be used for compression (default is 4KB)
; Note: Resulting chunk size may vary e to nature of compression. PHP
; outputs chunks that are few hundreds bytes each as a result of
; compression. If you prefer a larger chunk size for better
; performance, enable output_buffering in addition.
; Note: You need to use zlib.output_handler instead of the standard
; output_handler, or otherwise the output will be corrupted.
zlib.output_compression = Off

; You cannot specify additional output handlers if zlib.output_compression
; is activated here. This setting does the same as output_handler but in
; a different order.
;zlib.output_handler =

; Implicit flush tells PHP to tell the output layer to flush itself
; automatically after every output block. This is equivalent to calling the
; PHP function flush() after each and every call to print() or echo() and each
; and every HTML block. Turning this option on has serious performance
; implications and is generally recommended for debugging purposes only.
implicit_flush = Off

; The unserialize callback function will be called (with the undefined class'
; name as parameter), if the unserializer finds an undefined class
; which should be instantiated.
; A warning appears if the specified function is not defined, or if the
; function doesn't include/implement the missing class.
; So only set this entry, if you really want to implement such a
; callback-function.
unserialize_callback_func=

; When floats & doubles are serialized store serialize_precision significant
; digits after the floating point. The default value ensures that when floats
; are decoded with unserialize, the data will remain the same.
serialize_precision = 100

; Whether to enable the ability to force arguments to be passed by reference
; at function call time. This method is deprecated and is likely to be
; unsupported in future versions of PHP/Zend. The encouraged method of
; specifying which arguments should be passed by reference is in the function
; declaration. You're encouraged to try and turn this option Off and make
; sure your scripts work properly with it in order to ensure they will work
; with future versions of the language (you will receive a warning each time
; you use this feature, and the argument will be passed by value instead of by
; reference).
allow_call_time_pass_reference = On

;
; Safe Mode
;
safe_mode = Off

; By default, Safe Mode does a UID compare check when
; opening files. If you want to relax this to a GID compare,
; then turn on safe_mode_gid.
safe_mode_gid = Off

; When safe_mode is on, UID/GID checks are bypassed when
; including files from this directory and its subdirectories.
; (directory must also be in include_path or full path must
; be used when including)
safe_mode_include_dir =

; When safe_mode is on, only executables located in the safe_mode_exec_dir
; will be allowed to be executed via the exec family of functions.
safe_mode_exec_dir =

; Setting certain environment variables may be a potential security breach.
; This directive contains a comma-delimited list of prefixes. In Safe Mode,
; the user may only alter environment variables whose names begin with the
; prefixes supplied here. By default, users will only be able to set
; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).
;
; Note: If this directive is empty, PHP will let the user modify ANY
; environment variable!
safe_mode_allowed_env_vars = PHP_

; This directive contains a comma-delimited list of environment variables that
; the end user won't be able to change using putenv(). These variables will be
; protected even if safe_mode_allowed_env_vars is set to allow to change them.
safe_mode_protected_env_vars = LD_LIBRARY_PATH

; open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
;open_basedir =

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions =

; This directive allows you to disable certain classes for security reasons.
; It receives a comma-delimited list of class names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_classes =

; Colors for Syntax Highlighting mode. Anything that's acceptable in
; <span style="color: ???????"> would work.
;highlight.string = #DD0000
;highlight.comment = #FF9900
;highlight.keyword = #007700
;highlight.bg = #FFFFFF
;highlight.default = #0000BB
;highlight.html = #000000

; If enabled, the request will be allowed to complete even if the user aborts
; the request. Consider enabling it if executing long request, which may end up
; being interrupted by the user or a browser timing out.
; ignore_user_abort = On

;
; Misc
;
; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header). It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
expose_php = On

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 3000 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; error_reporting is a bit-field. Or each number up to get desired error
; reporting level
; E_ALL - All errors and warnings (doesn't include E_STRICT)
; E_ERROR - fatal run-time errors
; E_WARNING - run-time warnings (non-fatal errors)
; E_PARSE - compile-time parse errors
; E_NOTICE - run-time notices (these are warnings which often result
; from a bug in your code, but it's possible that it was
; intentional (e.g., using an uninitialized variable and
; relying on the fact it's automatically initialized to an
; empty string)
; E_STRICT - run-time notices, enable to have PHP suggest changes
; to your code which will ensure the best interoperability
; and forward compatibility of your code
; E_CORE_ERROR - fatal errors that occur ring PHP's initial startup
; E_CORE_WARNING - warnings (non-fatal errors) that occur ring PHP's
; initial startup
; E_COMPILE_ERROR - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR - user-generated error message
; E_USER_WARNING - user-generated warning message
; E_USER_NOTICE - user-generated notice message
;
; Examples:
;
; - Show all errors, except for notices and coding standards warnings
;
;error_reporting = E_ALL & ~E_NOTICE
;
; - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
;
; - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
; - Show all errors except for notices and coding standards warnings
;
error_reporting = E_ALL & ~E_NOTICE

; Print out errors (as a part of the output). For proction web sites,
; you're strongly encouraged to turn this feature off, and use error logging
; instead (see below). Keeping display_errors enabled on a proction web site
; may reveal security information to end users, such as file paths on your Web
; server, your database schema or other information.
display_errors = On

; Even when display_errors is on, errors that occur ring PHP's startup
; sequence are not displayed. It's strongly recommended to keep
; display_startup_errors off, except for when debugging.
display_startup_errors = Off

; Log errors into a log file (server-specific log, stderr, or error_log (below))
; As stated above, you're strongly advised to use error logging in place of
; error displaying on proction web sites.
log_errors = Off

; Set maximum length of log_errors. In error_log information about the source is
; added. The default is 1024 and 0 allows to not apply any maximum length at all.
log_errors_max_len = 1024

; Do not log repeated messages. Repeated errors must occur in same file on same
; line until ignore_repeated_source is set true.
ignore_repeated_errors = Off

; Ignore source of message when ignoring repeated messages. When this setting
; is On you will not log errors with repeated messages from different files or
; sourcelines.
ignore_repeated_source = Off

; If this parameter is set to Off, then memory leaks will not be shown (on
; stdout or in the log). This has only effect in a debug compile, and if
; error reporting includes E_WARNING in the allowed list
report_memleaks = On

; Store the last error/warning message in $php_errormsg (boolean).
track_errors = Off

; Disable the inclusion of HTML tags in error messages.
; Note: Never use this feature for proction boxes.
;html_errors = Off

; If html_errors is set On PHP proces clickable error messages that direct
; to a page describing the error or function causing the error in detail.
; You can download a of the PHP manual from http://www.php.net/docs.php
; and change docref_root to the base URL of your local including the
; leading '/'. You must also specify the file extension being used including
; the dot.
; Note: Never use this feature for proction boxes.
;docref_root = "/phpmanual/"
;docref_ext = .html

; String to output before an error message.
;error_prepend_string = "<font color=ff0000>"

; String to output after an error message.
;error_append_string = "</font>"

; Log errors to specified file.
;error_log = filename

; Log errors to syslog (Event Log on NT, not valid in Windows 95).
;error_log = syslog

;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
;
; Note - track_vars is ALWAYS enabled as of PHP 4.0.3

; The separator used in PHP generated URLs to separate arguments.
; Default is "&".
;arg_separator.output = "&"

; List of separator(s) used by PHP to parse input URLs into variables.
; Default is "&".
; NOTE: Every character in this directive is considered as separator!
;arg_separator.input = ";&"

; This directive describes the order in which PHP registers GET, POST, Cookie,
; Environment and Built-in variables (G, P, C, E & S respectively, often
; referred to as EGPCS or GPC). Registration is done from left to right, newer
; values override older values.
variables_order = "EGPCS"

; Whether or not to register the EGPCS variables as global variables. You may
; want to turn this off if you don't want to clutter your scripts' global scope
; with user data. This makes most sense when coupled with track_vars - in which
; case you can access all of the GPC variables through the $HTTP_*_VARS[],
; variables.
;
; You should do your best to write your scripts so that they do not require
; register_globals to be on; Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.
register_globals = On

; Whether or not to register the old-style input arrays, HTTP_GET_VARS
; and friends. If you're not using them, it's recommended to turn them off,
; for performance reasons.
register_long_arrays = On

; This directive tells PHP whether to declare the argv&argc variables (that
; would contain the GET information). If you don't use these variables, you
; should turn it off for increased performance.
register_argc_argv = On

; When enabled, the SERVER and ENV variables are created when they're first
; used (Just In Time) instead of when the script starts. If these variables
; are not used within a script, having this directive on will result in a
; performance gain. The PHP directives register_globals, register_long_arrays,
; and register_argc_argv must be disabled for this directive to have any affect.
auto_globals_jit = On

; Maximum size of POST data that PHP will accept.
post_max_size = 8M

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

; Automatically add files before or after any PHP document.
auto_prepend_file =
auto_append_file =

; As of 4.0b4, PHP always outputs a character encoding by default in
; the Content-type: header. To disable sending of the charset, simply
; set it to be empty.
;
; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"

; Always populate the $HTTP_RAW_POST_DATA variable.
;always_populate_raw_post_data = On

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
include_path = ".;D:\apptools\php5\PEAR"

; The root of the PHP pages, used only if nonempty.
; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
; if you are running php as a CGI under any web server (other than IIS)
; see documentation for security issues. The alternate is to use the
; cgi.force_redirect configuration below
doc_root =

; The directory under which PHP opens the script using /~username used only
; if nonempty.
user_dir =

; Directory in which the loadable extensions (moles) reside.
extension_dir = "D:/apptools/php5/ext"

; Whether or not to enable the dl() function. The dl() function does NOT work
; properly in multithreaded servers, such as IIS or Zeus, and is automatically
; disabled on them.
enable_dl = On

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:713
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:976
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:686
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:837
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:745
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1085
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:314
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:194
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:882
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:840