本文目錄一覽:
如何用php導出導入大資料庫
在使用PhpMyAdmin的時候經常用到數據的導入和導出(Export/Import),但是在導入大數據的時候由於php上傳文件的限制和腳本響應時間的限制,導致phpMyAdmin無法導入大數據。很多時候都是由於文件過大,從本地瀏覽上傳導入,容易中斷失敗,有沒有更好的方法呢?
方法:
在phpMyAdmin的目錄下,找到根目錄的config.inc.php文件,
打開config.inc.php文件,查找$cfg[‘UploadDir’],這個參數就是設定導入文件存放的目錄,這裡把值設定為:ImportSQLFile。
在phpMyAdmin目錄下,建立以ImportSQLFile命名的文件夾,
把我們需要導入的數據文件,放到ImportSQLFile文件夾下面,非常簡單,
登入phpMyAdmin,選擇需要導入的數據,點擊導航條上面的「導入」按鈕,
選中「從網站伺服器上傳文件夾ImportSQLFile/中選擇:」選項,並需要導入的數據文件,
最後點擊「執行」,即可導入成功。
注意事項
如果在config.inc.php文件,沒有找到$cfg[‘UploadDir’],可以自己在文件中添加上去即可。
怎樣用PHP實現文件上傳
創建一個文件上傳表單
允許用戶從表單上傳文件是非常有用的。
請看下面這個供上傳文件的 HTML 表單:
html
body
form action=”upload_file.php” method=”post”
enctype=”multipart/form-data”
label for=”file”Filename:/label
input type=”file” name=”file” id=”file” /
br /
input type=”submit” name=”submit” value=”Submit” /
/form
/body
/html
請留意如下有關此表單的信息:
form 標籤的 enctype 屬性規定了在提交表單時要使用哪種內容類型。在表單需要二進位數據時,比如文件內容,請使用 “multipart/form-data”。
input 標籤的 type=”file” 屬性規定了應該把輸入作為文件來處理。舉例來說,當在瀏覽器中預覽時,會看到輸入框旁邊有一個瀏覽按鈕。
注釋:允許用戶上傳文件是一個巨大的安全風險。請僅僅允許可信的用戶執行文件上傳操作。
創建上傳腳本
“upload_file.php” 文件含有供上傳文件的代碼:
?php
if ($_FILES[“file”][“error”] 0)
{
echo “Error: ” . $_FILES[“file”][“error”] . “br /”;
}
else
{
echo “Upload: ” . $_FILES[“file”][“name”] . “br /”;
echo “Type: ” . $_FILES[“file”][“type”] . “br /”;
echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kbbr /”;
echo “Stored in: ” . $_FILES[“file”][“tmp_name”];
}
?
通過使用 PHP 的全局數組 $_FILES,你可以從客戶計算機向遠程伺服器上傳文件。
第一個參數是表單的 input name,第二個下標可以是 “name”, “type”, “size”, “tmp_name” 或 “error”。就像這樣:
$_FILES[“file”][“name”] – 被上傳文件的名稱
$_FILES[“file”][“type”] – 被上傳文件的類型
$_FILES[“file”][“size”] – 被上傳文件的大小,以位元組計
$_FILES[“file”][“tmp_name”] – 存儲在伺服器的文件的臨時副本的名稱
$_FILES[“file”][“error”] – 由文件上傳導致的錯誤代碼
這是一種非常簡單文件上傳方式。基於安全方面的考慮,您應當增加有關什麼用戶有權上傳文件的限制。
上傳限制
在這個腳本中,我們增加了對文件上傳的限制。用戶只能上傳 .gif 或 .jpeg 文件,文件大小必須小於 20 kb:
?php
if ((($_FILES[“file”][“type”] == “image/gif”)
|| ($_FILES[“file”][“type”] == “image/jpeg”)
|| ($_FILES[“file”][“type”] == “image/pjpeg”))
($_FILES[“file”][“size”] 20000))
{
if ($_FILES[“file”][“error”] 0)
{
echo “Error: ” . $_FILES[“file”][“error”] . “br /”;
}
else
{
echo “Upload: ” . $_FILES[“file”][“name”] . “br /”;
echo “Type: ” . $_FILES[“file”][“type”] . “br /”;
echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kbbr /”;
echo “Stored in: ” . $_FILES[“file”][“tmp_name”];
}
}
else
{
echo “Invalid file”;
}
?
注釋:對於 IE,識別 jpg 文件的類型必須是 pjpeg,對於 FireFox,必須是 jpeg。
保存被上傳的文件
上面的例子在伺服器的 PHP 臨時文件夾創建了一個被上傳文件的臨時副本。
這個臨時的複製文件會在腳本結束時消失。要保存被上傳的文件,我們需要把它拷貝到另外的位置:
?php
if ((($_FILES[“file”][“type”] == “image/gif”)
|| ($_FILES[“file”][“type”] == “image/jpeg”)
|| ($_FILES[“file”][“type”] == “image/pjpeg”))
($_FILES[“file”][“size”] 20000))
{
if ($_FILES[“file”][“error”] 0)
{
echo “Return Code: ” . $_FILES[“file”][“error”] . “br /”;
}
else
{
echo “Upload: ” . $_FILES[“file”][“name”] . “br /”;
echo “Type: ” . $_FILES[“file”][“type”] . “br /”;
echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kbbr /”;
echo “Temp file: ” . $_FILES[“file”][“tmp_name”] . “br /”;
if (file_exists(“upload/” . $_FILES[“file”][“name”]))
{
echo $_FILES[“file”][“name”] . ” already exists. “;
}
else
{
move_uploaded_file($_FILES[“file”][“tmp_name”],
“upload/” . $_FILES[“file”][“name”]);
echo “Stored in: ” . “upload/” . $_FILES[“file”][“name”];
}
}
}
else
{
echo “Invalid file”;
}
?
上面的腳本檢測了是否已存在此文件,如果不存在,則把文件拷貝到指定的文件夾。
注釋:這個例子把文件保存到了名為 “upload” 的新文件夾。
利用php導入excel文件
【步驟1】在前台html頁面進行上傳文件
form method=”post” action=”php文件” enctype=”multipart/form-data”
h3導入Excel表:/h3input type=”file” name=”file_stu” /
input type=”submit” value=”導入” /
/form
【步驟2】在對應的php文件進行文件的處理
if (! empty ( $_FILES [‘file_stu’] [‘name’] ))
{ $tmp_file = $_FILES [‘file_stu’] [‘tmp_name’]; $file_types = explode ( “.”, $_FILES [‘file_stu’] [‘name’] ); $file_type = $file_types [count ( $file_types ) – 1];
/*判別是不是.xls文件,判別是不是excel文件*/ if (strtolower ( $file_type ) != “xls”) { $this-error ( ‘不是Excel文件,重新上傳’ ); }
/*設置上傳路徑*/ $savePath = SITE_PATH . ‘/public/upfile/Excel/’;
/*以時間來命名上傳的文件*/ $str = date ( ‘Ymdhis’ ); $file_name = $str . “.” . $file_type;
/*是否上傳成功*/ if (! copy ( $tmp_file, $savePath . $file_name )) { $this-error ( ‘上傳失敗’ ); }
/*
*對上傳的Excel數據進行處理生成編程數據,這個函數會在下面第三步的ExcelToArray類中
注意:這裡調用執行了第三步類裡面的read函數,把Excel轉化為數組並返回給$res,再進行資料庫寫入
*/ $res = Service ( ‘ExcelToArray’ )-read ( $savePath . $file_name );
/*
重要代碼 解決Thinkphp M、D方法不能調用的問題
如果在thinkphp中遇到M 、D方法失效時就加入下面一句代碼
*/
//spl_autoload_register ( array (‘Think’, ‘autoload’ ) );
/*對生成的數組進行資料庫的寫入*/
foreach ( $res as $k = $v ) { if ($k != 0) { $data [‘uid’] = $v [0]; $data [‘password’] = sha1 ( ‘111111’ ); $data [’email’] = $v [1];
$data [‘uname’] = $v [3];
$data [‘institute’] = $v [4]; $result = M ( ‘user’ )-add ( $data ); if (! $result) { $this-error ( ‘導入資料庫失敗’ ); } } }
}
【步驟3】ExcelToArrary類,用來引用phpExcel並處理Excel數據的
class ExcelToArrary extends Service{
public function __construct() {
/*導入phpExcel核心類 注意 :你的路徑跟我不一樣就不能直接複製*/ include_once(‘./Excel/PHPExcel.php’); }
/**
* 讀取excel $filename 路徑文件名 $encode 返回數據的編碼 默認為utf8
*以下基本都不要修改
*/
public function read($filename,$encode=’utf-8′){
$objReader = PHPExcel_IOFactory::createReader(‘Excel5’);
$objReader-setReadDataOnly(true);
$objPHPExcel = $objReader-load($filename);
$objWorksheet = $objPHPExcel-getActiveSheet();
$highestRow = $objWorksheet-getHighestRow(); $highestColumn = $objWorksheet-getHighestColumn(); $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); $excelData = array(); for ($row = 1; $row = $highestRow; $row++) { for ($col = 0; $col $highestColumnIndex; $col++) { $excelData[$row][] =(string)$objWorksheet-getCellByColumnAndRow($col, $row)-getValue(); } } return $excelData;
}
}
php上傳文件到文件夾
//這是給文件重命名
$one = explode(“.”,$_FILES[“file”][“name”]);
$file_name = $_FILES[“file”][“name”] = time().”.”.$one[1];
//這是上傳,用到move_uploaded_file,移動到:./assets/up/這個文件夾
move_uploaded_file($_FILES[“file”][“tmp_name”], “./assets/up/” . $file_name);
//這是往資料庫存放的 文件名稱
$information_img = “./assets/up/” . $file_name;
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/283357.html