脚本在文件上传完成前退出
Script exits before finishing uploading of files
我有一个 PHP 上传文件的脚本。但是,当上传总大小太大时,脚本会在上传大约 97% 时退出,并让我返回到上一页。我无法让它抛出错误消息,所以我不确定是什么原因造成的。没有文件实际上传或添加到数据库。
我认为这可能是内存问题,所以在上传脚本的顶部,我有:
ini_set("memory_limit", "64M");
奇怪的是,无论我尝试上传多少文件,如果要退出,它总是在上传的最后阶段 right 退出 (~97% ).我假设如果这是内存问题,它会在 运行 退出后立即退出。
另一个想法是超过了允许的最大文件数,但是检查配置,我明白了
ini_get("max_file_uploads") = 20
我的整个 PHP 脚本如下(忽略奇怪的变量大小写,我将此脚本与其他人创建的旧脚本的格式保持一致)。
ini_set("memory_limit", "64M");
if (!isset($_POST['SiteID']) || !filter_var($_POST['SiteID'], FILTER_VALIDATE_INT)) {
header("Location: ./");
exit();
}
$SiteID = $_POST['SiteID'];
if (!isset($_POST['GalleryID']) || !filter_var($_POST['GalleryID'], FILTER_VALIDATE_INT)) {
header("Location: ./?SiteID=" . $SiteID . "&error=upload");
exit();
}
$GalleryID = $_POST['GalleryID'];
$ImageFile = $_FILES['ImageFile'];
$Extensions = array("jpg", "jpeg");
$Timestamp = date("U");
require_once("db.php");
for ($X = 0; $X < count($_FILES['ImageFile']['name']); $X++) {
$Extension = strtolower(pathinfo($ImageFile['name'][$X], PATHINFO_EXTENSION));
if (in_array($Extension, $Extensions)) {
if ($ImageFile['error'][$X] === UPLOAD_ERR_OK) {
if ($ImageFile['size'][$X] <= 5 * 1024 * 1024) {
$Filename = $GalleryID . "-" . $Timestamp . "-" . $X . "." . $Extension;
move_uploaded_file($ImageFile['tmp_name'][$X], "uploads/" . $Filename);
mysql_query("INSERT INTO NewGalleryImages SET GalleryID = $GalleryID, ImageFile = '$Filename', ImageCaption = ''");
$Dimensions = getimagesize("uploads/" . $Filename);
$Width = ($Dimensions[0] > 768 ? 768 : $Dimensions[0]);
$Height = ($Dimensions[1] / $Dimensions[0]) * $Width;
$Expl = explode(".", $Filename);
$LargeFilename = $Expl[0] . "_gallery." . $Expl[1];
$Source = "uploads/" . $Filename;
$Canvas = imagecreatetruecolor($Width, $Height);
$LargeImage = imagecreatefromjpeg($Source);
imagecopyresampled($Canvas, $LargeImage, 0, 0, 0, 0, $Width, $Height, $Dimensions[0], $Dimensions[1]);
imagejpeg($Canvas, "uploads/" . $LargeFilename, 100);
$Width = 200;
$Height = ($Dimensions[1] / $Dimensions[0]) * $Width;
$Expl = explode(".", $Filename);
$ThumbFilename = $Expl[0] . "_thumb." . $Expl[1];
$Source = "uploads/" . $Filename;
$Canvas = imagecreatetruecolor($Width, $Height);
$ThumbImage = imagecreatefromjpeg($Source);
imagecopyresampled($Canvas, $ThumbImage, 0, 0, 0, 0, $Width, $Height, $Dimensions[0], $Dimensions[1]);
imagejpeg($Canvas, "uploads/" . $ThumbFilename, 100);
} else {
mysql_close();
header("Location: ./?SiteID=" . $SiteID . "&error=size");
exit();
}
} else {
mysql_close();
header("Location: ./?SiteID=" . $SiteID . "&error=unknown");
exit();
}
} else {
mysql_close();
header("Location: ./?SiteID=" . $SiteID . "&error=type");
exit();
}
}
mysql_close();
header("Location: ./?SiteID=" . $SiteID . "&uploaded");
exit();
// var_dump($_POST);
// var_dump($_FILES);
// var_dump($ImageFile);
上传13个14.2MB上传失败,上传8个4.82MB上传成功
导致此脚本的初始形式:
<form action="gallery-upload.php" method="post" enctype="multipart/form-data">
<input class="form-control" name="ImageFile[]" type="file" multiple required>
<input type="hidden" name="SiteID" value="<?=$SiteID?>">
<input type="hidden" name="GalleryID" value="<?=$GalleryID?>">
<button class="btn btn-primary" type="submit">Upload Images</button>
</form>
有什么解决办法吗?或者至少查看有关脚本退出原因的错误?
更改 php.ini 文件中的一些设置
max_execution_time = 60
60 or higher sets the maximum time in seconds
我有一个 PHP 上传文件的脚本。但是,当上传总大小太大时,脚本会在上传大约 97% 时退出,并让我返回到上一页。我无法让它抛出错误消息,所以我不确定是什么原因造成的。没有文件实际上传或添加到数据库。
我认为这可能是内存问题,所以在上传脚本的顶部,我有:
ini_set("memory_limit", "64M");
奇怪的是,无论我尝试上传多少文件,如果要退出,它总是在上传的最后阶段 right 退出 (~97% ).我假设如果这是内存问题,它会在 运行 退出后立即退出。
另一个想法是超过了允许的最大文件数,但是检查配置,我明白了
ini_get("max_file_uploads") = 20
我的整个 PHP 脚本如下(忽略奇怪的变量大小写,我将此脚本与其他人创建的旧脚本的格式保持一致)。
ini_set("memory_limit", "64M");
if (!isset($_POST['SiteID']) || !filter_var($_POST['SiteID'], FILTER_VALIDATE_INT)) {
header("Location: ./");
exit();
}
$SiteID = $_POST['SiteID'];
if (!isset($_POST['GalleryID']) || !filter_var($_POST['GalleryID'], FILTER_VALIDATE_INT)) {
header("Location: ./?SiteID=" . $SiteID . "&error=upload");
exit();
}
$GalleryID = $_POST['GalleryID'];
$ImageFile = $_FILES['ImageFile'];
$Extensions = array("jpg", "jpeg");
$Timestamp = date("U");
require_once("db.php");
for ($X = 0; $X < count($_FILES['ImageFile']['name']); $X++) {
$Extension = strtolower(pathinfo($ImageFile['name'][$X], PATHINFO_EXTENSION));
if (in_array($Extension, $Extensions)) {
if ($ImageFile['error'][$X] === UPLOAD_ERR_OK) {
if ($ImageFile['size'][$X] <= 5 * 1024 * 1024) {
$Filename = $GalleryID . "-" . $Timestamp . "-" . $X . "." . $Extension;
move_uploaded_file($ImageFile['tmp_name'][$X], "uploads/" . $Filename);
mysql_query("INSERT INTO NewGalleryImages SET GalleryID = $GalleryID, ImageFile = '$Filename', ImageCaption = ''");
$Dimensions = getimagesize("uploads/" . $Filename);
$Width = ($Dimensions[0] > 768 ? 768 : $Dimensions[0]);
$Height = ($Dimensions[1] / $Dimensions[0]) * $Width;
$Expl = explode(".", $Filename);
$LargeFilename = $Expl[0] . "_gallery." . $Expl[1];
$Source = "uploads/" . $Filename;
$Canvas = imagecreatetruecolor($Width, $Height);
$LargeImage = imagecreatefromjpeg($Source);
imagecopyresampled($Canvas, $LargeImage, 0, 0, 0, 0, $Width, $Height, $Dimensions[0], $Dimensions[1]);
imagejpeg($Canvas, "uploads/" . $LargeFilename, 100);
$Width = 200;
$Height = ($Dimensions[1] / $Dimensions[0]) * $Width;
$Expl = explode(".", $Filename);
$ThumbFilename = $Expl[0] . "_thumb." . $Expl[1];
$Source = "uploads/" . $Filename;
$Canvas = imagecreatetruecolor($Width, $Height);
$ThumbImage = imagecreatefromjpeg($Source);
imagecopyresampled($Canvas, $ThumbImage, 0, 0, 0, 0, $Width, $Height, $Dimensions[0], $Dimensions[1]);
imagejpeg($Canvas, "uploads/" . $ThumbFilename, 100);
} else {
mysql_close();
header("Location: ./?SiteID=" . $SiteID . "&error=size");
exit();
}
} else {
mysql_close();
header("Location: ./?SiteID=" . $SiteID . "&error=unknown");
exit();
}
} else {
mysql_close();
header("Location: ./?SiteID=" . $SiteID . "&error=type");
exit();
}
}
mysql_close();
header("Location: ./?SiteID=" . $SiteID . "&uploaded");
exit();
// var_dump($_POST);
// var_dump($_FILES);
// var_dump($ImageFile);
上传13个14.2MB上传失败,上传8个4.82MB上传成功
导致此脚本的初始形式:
<form action="gallery-upload.php" method="post" enctype="multipart/form-data">
<input class="form-control" name="ImageFile[]" type="file" multiple required>
<input type="hidden" name="SiteID" value="<?=$SiteID?>">
<input type="hidden" name="GalleryID" value="<?=$GalleryID?>">
<button class="btn btn-primary" type="submit">Upload Images</button>
</form>
有什么解决办法吗?或者至少查看有关脚本退出原因的错误?
更改 php.ini 文件中的一些设置
max_execution_time = 60
60 or higher sets the maximum time in seconds