我即將開始使用PHP腳本來導入csv數據庫。從URL複製圖像,更改名稱並保存到文件夾
該csv有一個列與產品圖像的網址。
我需要做的是得到圖像,檢查它是什麼類型的文件(JPG,PNG等),更改名稱,將文件保存到服務器上的文件夾,然後插入文件名進入數據庫。
插入到數據庫的位我可以做,它的文件名與im混淆了。
是否有可能搶喜歡你的信息將上傳文件時,例如:
使用文件輸入HTML表單
$_FILES['file']['name'];
or
$_FILES['file']['type'];
如果下載一個文件,上傳文件,能這是可能的
$downloaded_image['name'];
or
$downloaded_image['type'];
或是完全脫離標記?
我從來沒有這樣做過,並且大多數在stackoverflow上的答案都不能完全回答我的問題,所以希望有人能指出我在正確的方向如何做到這一點。
編輯/更新:
會是這樣的工作來獲取文件屬性...
$image_id = '123456';
$the_image = file_get_contents($downloaded_image);
$image_name = $the_image['name'];
$image_type = $the_image['type'];
$new_name = $image_id . '.' . $image_type;
$img_path = '/images/';
$save_image = file_put_contents($img_path, $new_name);
if($save_image) {
echo 'image saved';
} else {
echo 'Not Saved';
}
希望IM做一些感覺。
更新:這裏是腳本,因爲它是(仍然需要整理)
define('CSV_PATH','E:/xampp/htdocs/aff/csv-import/');
// path where your CSV file is located
$csv_file = CSV_PATH . "infotuts.csv"; // Name of your CSV file
$csvfile = fopen($csv_file, 'r');
$theData = fgets($csvfile);
$i = 0;
while (!feof($csvfile)) {
$csv_data[] = fgets($csvfile, 1024);
$csv_array = explode(",", $csv_data[$i]);
$insert_csv = array();
$insert_csv['test_id'] = $csv_array[0];
// $insert_csv['test_aw_id'] = $csv_array[1];
// $insert_csv['test_name'] = $csv_array[2];
$image_id = $csv_array[1];
$download_image = $csv_array[2];
// Store the original filename
$original_name = basename($download_image);
// Original extension by string manipulation
$original_extension = substr($original_name, strrpos($original_name, '.')); // ".jpg"
// An array to match mime types from finfo_file() with extensions
// Use of finfo_file() is recommended if you can't trust the input
// filename's extension
$types = array('image/jpeg' => '.jpg','image/png' => '.png','image/gif' => '.gif');
// Get the file and save it
$img = file_get_contents($download_image);
$stored_name = 'images/' . $image_id . $original_extension;
if ($img) {
file_put_contents($stored_name);
// Get the filesize if needed
$size = filesize($stored_name);
// If you don't care about validating the mime type, skip all of this...
// Check the file information
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $stored_name);
// Lookup the type in your array to get the extension
if (isset($types[$mimetype])) {
// if the reported type doesn't match the original extension, rename the file
if ($types[$mimetype] != $original_extension) {
rename($stored_name, 'images/' . $image_id . $types[$mimetype]);
}
}
else {
// unknown type, handle accordingly...
}
finfo_close($finfo);
$query = "INSERT INTO test(test_id, test_aw_id, test_name) VALUES ('', '$image_id', '$stored_name')";
$n=mysqli_query($con, $query);
$i++;
}
else {
echo 'Could not get file';
}
}
fclose($csvfile);
這要看是什麼樣打開網址PHP配置。如果它被許可,那麼你可以使用$ fileContents = file_get_contents(image_url_there);您可以從文件擴展名中獲得的類型。否則,您應該使用curl來獲取外部內容 – bksi 2014-09-04 00:11:14
否。file_get_contents獲取文件內容。文件名在您打開的網址中。您可以從文件擴展名獲得的文件類型或使用fileinfo函數。 – bksi 2014-09-04 00:38:23
在你提出的代碼中,'$ download_image'從哪裏來?這是您的文件系統上的圖像,您提供給用戶下載,還是這是您從其他位置檢索(下載)並保存的圖像?我想我早點誤解了你的意圖。 – 2014-09-04 01:07:11