我正在尝试创建使用Imagick从pdf上传缩略图。我写了一个脚本来完成它,但是,它只上传文件而没有创建缩略图。这肯定会让你们中的一些人眼花缭乱,但是,PHP对我来说是完全未知的领域。有人能帮我吗?谢谢!
<?php
include 'includes/session.php';
include 'includes/slugify.php';
if(isset($_POST['add'])){
$name = $_POST['name'];
$slug = slugify($name);
$category = $_POST['category'];
$price = $_POST['price'];
$description = $_POST['description'];
$filename = $_FILES['photo']['name'];
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
$allowed = array('pdf', 'doc', 'docx', 'odc', 'jpg');
$conn = $pdo->open();
$stmt = $conn->prepare("SELECT *, COUNT(*) AS numrows FROM products WHERE slug=:slug");
$stmt->execute(['slug'=>$slug]);
$row = $stmt->fetch();
if($row['numrows'] > 0){
$_SESSION['error'] = 'document already exists';
}
else{
if(!in_array($ext, $allowed)) {
$_SESSION['error'] = 'Filetype not allowed';
}
else{
if(!empty($filename)){
$new_filename = $slug.'.'.$ext;
copy($_FILES['photo']['tmp_name'], '../documents/'.$new_filename);
}
else{
$new_filename = '';创建缩略图
$img = new Imagick($filename[0]);
$img-> setImageFormat('jpg');
$convert = $slug. '.' .$jpg;
$img-> writeImages($_FILES['photo']['tmp_name'], '../images/'.$convert);
}
try{
$stmt = $conn->prepare("INSERT INTO products (category_id, name, description,
slug, price, photo) VALUES (:category, :name, :description, :slug, :price, :
photo)");
$stmt->execute(['category'=>$category, 'name'=>$name,
'description'=>$description,
'slug'=>$slug, 'price'=>$price, 'photo'=>$new_filename]);
$_SESSION['success'] = 'document added successfully';
}
catch(PDOException $e){
$_SESSION['error'] = $e->getMessage();
}
}
}
$pdo->close();
}
else{
$_SESSION['error'] = 'Fill up product form first';
}
header('location: documents.php');
?>发布于 2021-08-08 05:15:42
似乎您对$img->writeImages($_FILES['photo']['tmp_name'], '../images/'.$convert)的调用是不正确的:您正在传递两个字符串(上传的图像的文件名和看起来像目标文件名的文件名),但是Imagick文档指示您应该只传递一个目标文件名(以及一个可选的布尔值)。
所以这个:
$img-> writeImages($_FILES['photo']['tmp_name'], '../images/'.$convert);可能应该是:
$img-> writeImages('../images/'.$convert);另外,很难判断您发布的两块PHP是否是一个接一个地来的,但是如果是这样的话,那么您创建图像的逻辑看起来就有问题:
if(!empty($filename)){
// Do some stuff
} else {
// Write the images
}这里的问题是,只在$filename为空时才执行写入映像的代码块。如果$filename不是空的,它不应该写图像吗?
最后但并非最不重要的是,Imagick writeImages()函数返回一个布尔值,指示它是否成功。您应该存储这个结果并记录下来,看看结果是什么。您还应该确认您的目标文件名('../images/'.$convert)是正确的,并且路径是存在的并且是可写的。
https://stackoverflow.com/questions/68682172
复制相似问题