在Intranet站点上,我将许多图像从文件系统移到MySQL,并编写了一些辅助功能。没有错误,但没有图像被插入。
而且,具有相同名称的图像位于子文件夹中,该子文件夹的名称正在传递给该函数,但是我不确定如何合并它,以便较小的图像写入同一行。目前没有任何编程方法,因为我不知道从哪里开始!
关于这两件事有什么想法吗?当然,第二个是有争议的,直到第一个开始工作。
function uploadFolder($path,$thumbpath) {
// Use form to submit path (keeps process from running automatically when loaded)
if (isset($_POST['create']) && isset($path)) :
global $siteDB;
// Fetch image names from existing albums
$sqlAlbum = "SELECT ID, ImageName FROM albums ORDER BY ImageName";
$sqlRow = DBConnect($sqlAlbum, "Multiple", $siteDB, "assoc");
// Build queries to insert all images to table
foreach ($sqlRow as $row) :
$filename = basename($row['ImageName']);
$albumID = $row['ID'];
$pathname = $path.$filename;
$sqlUpload = "INSERT INTO images (`ImageName`,`AlbumID`,`ImageFull`) VALUES ('$filename', $albumID, LOAD_FILE('$pathname'))";
// Run the query for each file
DBConnect($sqlUpload,"Run", $siteDB);
endforeach;
// FOR TEST PURPOSES ONLY
$_SESSION['testSQL'] = $sqlUpload;
endif;
}
被调用:
if (isset($_POST)) :
$path = (isset($_POST['path'])) ? $_POST['path'] : "";
uploadFolder($path,"thumbnails");
endif;
对于图像表不是很多,但是这里是:
CREATE TABLE IF NOT EXISTS `images` (
`ID` int unsigned NOT NULL AUTO_INCREMENT,
`ImageName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`AlbumID` int unsigned DEFAULT NULL,
`ImageFull` blob,
`ImageThumb` blob,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=228 DEFAULT CHARSET=utf8;
很难确定,因为您使用的是带有某些奇怪参数约定的数据库包装程序。通常,您不会使用LOAD_FILE,而是使用php将文件读取到变量中,并使用mysql客户端api保存每一行。
LOAD_FILE可以工作,但是它必须是文件的确切路径,并且有效的Web服务器用户(运行Web服务器的用户)必须具有您尝试读取的目录的权限。
假定是正确的,类似这样的方法应该起作用:
foreach ($sqlRow as $row) :
$filename = basename($row['ImageName']);
$albumID = $row['ID'];
$pathname = $path.$filename;
$thumbPathname = $thumbpath.$filename
$sqlUpload = "INSERT INTO images (`ImageName`,`AlbumID`,`ImageFull`,`ImageThumb`) VALUES ('$filename', $albumID, LOAD_FILE('$pathname'), LOAD_FILE('$thumbPathname'));\n";
// Run the query for each file
DBConnect($sqlUpload,"Run", $siteDB);
endforeach;
调用此例程的窗体需要更改,以便它既有普通图像又有缩略图的输入。目标脚本也需要相应地更改。
if (isset($_POST)) :
$path = (isset($_POST['path'])) ? $_POST['path'] : "";
$thumbpath = (isset($_POST['thumbpath'])) ? $_POST['thumbpath'] : "";
uploadFolder($path,$thumbpath);
endif;
潜在问题:
DBConnect()
功能出了问题,您怎么知道?确定
/somepath/to/directory/
将不工作
/somepath/to/directory