Php 图像上传表单不支持';我不能在网上工作
我在本地主机上运行了一个基于HTML/PHP的工作站点(使用XAMPP)。但是当我把它转移到一个实时服务器上时,有一部分不想工作。。图片上传。localhost和live上的数据库几乎相同。所有其他使用数据库的东西都很好。我只是不能上传图片 这是我用于上传的代码:Php 图像上传表单不支持';我不能在网上工作,php,mysql,database,upload,xampp,Php,Mysql,Database,Upload,Xampp,我在本地主机上运行了一个基于HTML/PHP的工作站点(使用XAMPP)。但是当我把它转移到一个实时服务器上时,有一部分不想工作。。图片上传。localhost和live上的数据库几乎相同。所有其他使用数据库的东西都很好。我只是不能上传图片 这是我用于上传的代码: <?php include 'includes/header.php'; ?> <br /><br /> <form action="image.php" m
<?php
include 'includes/header.php';
?>
<br /><br />
<form action="image.php" method="POST" enctype="multipart/form-data">
<input type="file" name="image">
<br /><br />
<input type="submit" name="submit" value="Upload">
</form>
<?php
if(isset($_POST['submit']))
{
include 'includes/connection.php';
$imageName = mysql_real_escape_string($_FILES["image"]["name"]);
$imageData = mysql_real_escape_string(file_get_contents($_FILES["image"]["tmp_name"]));
$imageType = mysql_real_escape_string($_FILES["image"]["type"]);
if(substr($imageType,0,5) == "image")
{
mysql_query("INSERT INTO `blob` VALUES('','$imageName','$imageData' )");
echo "Plaatje opgeslagen";
}
else{
echo "alleen plaatjes";
}
}
?>
</body>
PHP 5.5.0中不推荐使用mysql_query()函数。要研究的一个较新标准是内置在PHP中的PDO驱动程序
另外,某些人目前的最高职位是
您最好仔细检查$\u文件的结构和值。
以下代码绝对不会导致任何错误
例如:
header('Content-Type: text/plain; charset=utf-8');
try {
// Undefined | Multiple Files | $_FILES Corruption Attack
// If this request falls under any of them, treat it invalid.
if (
!isset($_FILES['upfile']['error']) ||
is_array($_FILES['upfile']['error'])
) {
throw new RuntimeException('Invalid parameters.');
}
// Check $_FILES['upfile']['error'] value.
switch ($_FILES['upfile']['error']) {
case UPLOAD_ERR_OK:
break;
case UPLOAD_ERR_NO_FILE:
throw new RuntimeException('No file sent.');
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
throw new RuntimeException('Exceeded filesize limit.');
default:
throw new RuntimeException('Unknown errors.');
}
// You should also check filesize here.
if ($_FILES['upfile']['size'] > 1000000) {
throw new RuntimeException('Exceeded filesize limit.');
}
// DO NOT TRUST $_FILES['upfile']['mime'] VALUE !!
// Check MIME Type by yourself.
$finfo = new finfo(FILEINFO_MIME_TYPE);
if (false === $ext = array_search(
$finfo->file($_FILES['upfile']['tmp_name']),
array(
'jpg' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
),
true
)) {
throw new RuntimeException('Invalid file format.');
}
// You should name it uniquely.
// DO NOT USE $_FILES['upfile']['name'] WITHOUT ANY VALIDATION !!
// On this example, obtain safe unique name from its binary data.
if (!move_uploaded_file(
$_FILES['upfile']['tmp_name'],
sprintf('./uploads/%s.%s',
sha1_file($_FILES['upfile']['tmp_name']),
$ext
)
)) {
throw new RuntimeException('Failed to move uploaded file.');
}
echo 'File is uploaded successfully.';
} catch (RuntimeException $e) {
echo $e->getMessage();
}
?>
他的代码是我选择验证和存储文件的方式。请注意,他没有将图像存储在数据库中,而是将其上载到名为uploads的文件中的服务器/
然后,您可以将此文件路径存储在数据库列中,并在需要时检索它
希望这能有所帮助。一些注意事项:
- 您可能希望更新以使用mysqli或PDO_MYSQL,因为从PHP7开始,MYSQL功能被删除
- 永远不要信任表单数据(例如$_文件[“image”][“type”]),因为它不可靠
- 可能需要检查图像大小,以便人们不会将大量图像上载到您的数据库中
尝试类似以下内容:
HTML:
选择要上载的图像:
PHP:
您是否尝试检查您的PHP错误日志?请检查live中的PHP版本。检查mysqli
或PDO
,因为在PHP7
mysql.*
中已删除。
<form action="image.php" method="post" enctype="multipart/form-data">
Select image to upload: <input type="file" name="imageUpload" id="imageUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
<?php
$imageTypes = ['png', 'jpg', 'gif'];
if($_POST["submit"] == 'Upload Image')
{
$fileExt = pathinfo($_FILES['imageUpload']['tmp_name'], PATHINFO_EXTENSION);
if(!in_array($fileExt, $imageTypes))
throw new Exception("Invalid upload type we only accept: " . implode(", ", $imageTypes)).
else
{
$imageStr = mysql_real_escape_string(file_get_contents($_FILES['imageUpload']['tmp_name']));
$imgName = mysql_real_escape_string($_FILES["imageUpload"]["name"]);
mysql_query("INSERT INTO `blob` VALUES('','$imgName','$imageStr' )");
}
}