PHP -文件获取内容():文件名不能为空

hs1ihplo  于 2023-03-16  发布在  PHP
关注(0)|答案(4)|浏览(136)

有人能帮我处理这个错误吗?我不知道什么方法或方式来摆脱这个错误。我是新的php和开始学习它。有人能给予我的想法吗?
下面是错误:

这是我php代码。

<?php

include_once('connection.php');

 $newsid = $_GET['news_id'];

    if(isset($_POST['esubmit'])){
        /* create a prepared statement */
        if ($stmt = mysqli_prepare($con, "SELECT * FROM news WHERE news_id = ? LIMIT 1")) {
            /* bind parameters */
            mysqli_stmt_bind_param($stmt, "s", $newsid);

            /* execute query */
            mysqli_stmt_execute($stmt);

            /* get the result set */
            $result = mysqli_stmt_get_result($stmt);

            /* fetch row from the result set */
            $row = mysqli_fetch_array($result);
        }

    }

    if(isset($_POST['update'])){

        if(isset($_FILES['image'])){
          $file=$_FILES['image']['tmp_name'];
          /* Below is the line 30 causing the error*/
          $image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
          $image_name= addslashes($_FILES['image']['name']);
          move_uploaded_file($_FILES["image"]["tmp_name"],"img/" . $_FILES["image"]["name"]);
          $newsimage="img/" . $_FILES["image"]["name"];

          $title = $_POST['titles'];
          $date = $_POST['dates'];
          $content = $_POST['contents'];

          $sql ="UPDATE news SET news_title ='$title', news_date ='$date', news_content = '$content', news_image ='$newsimage' WHERE news_id = '$newsid'";
          mysqli_query($con, $sql);
          echo "oh it worked ";
        }
        else{
          $title = $_POST['titles'];
          $date = $_POST['dates'];
          $content = $_POST['contents'];
          $sql ="UPDATE news SET news_title ='$title', news_date ='$date', news_content = '$content' WHERE news_id = '$newsid'";
          mysqli_query($con, $sql);
          echo "oh it worked again ";
        }

    }
?>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>

<?php

    if(isset($_POST['esubmit'])){
        ?>

        <form method="post" action ="edit2.php?news_id=<?php echo $row['news_id']; ?>" enctype="multipart/form-data">
            Title<input type ="text" name ="titles" value="<?php echo $row['news_title']; ?>"/><br>
            Date<input type ="text" name="dates" value="<?php echo $row['news_date']; ?>" /><br>
            Content<textarea name="contents"><?php echo $row['news_content']; ?></textarea>
            <input class="form-control" id="image" name="image" type="file" accept="image/*" onchange='AlertFilesize();'/>
            <img id="blah" src="<?php echo $row['news_image']; ?>" alt="your image" style="width:200px; height:140px;"/>

            <input type="submit" name="update" value="Update" />
        </form>

        <?php
    }

?>

<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript">
    function readURL(input) {
        if (input.files && input.files[0]) {
            var reader = new FileReader();

            reader.onload = function (e) {
                $('#blah').attr('src', e.target.result);
            }

            reader.readAsDataURL(input.files[0]);
        }
    }

    $("#image").change(function(){
        readURL(this);
    });
    </script>
</body>
</html>
gv8xihay

gv8xihay1#

为什么要在(临时)文件名中添加slahes?
您的第30行:

$image= addslashes(file_get_contents($_FILES['image']['tmp_name']));

因此,要删 debugging 误警告:

if(!empty($_FILES['image']['tmp_name']) 
     && file_exists($_FILES['image']['tmp_name'])) {
    $image= addslashes(file_get_contents($_FILES['image']['tmp_name']));
}
  • 有很多其他的事情,你可以/应该做这个代码,但我不能去它太多的细节与你,但基本上你应该检查$_FILES['image']['error'] == 0,以确保代码只运行,如果文件已成功上传。
  • 替换
if(isset($_FILES['image'])){

使用错误检查:

if($_FILES['image']['error'] == 0){

这意味着只有OK上载的文件才会运行IF语句内容

  • 停止添加斜线,不需要。
  • 对SQL查询使用预准备语句。
  • Move_uploaded_file在理想情况下应该被给予绝对路径而不是相对路径。
  • 你有没有意识到你的file_get_contents正在获取一个文件中的*数据,而不是一个引用,而是实际的二进制文件数据。这看起来不是你在这个阶段需要做的。你的$image值没有明确地在你提供的代码中使用,正如apokryfos正确指出的那样,你实际上是在图像的文件数据中添加斜线,这只会让你的$image变得混乱不堪。
t2a7ltrp

t2a7ltrp2#

如果其他人仍然有这个问题。这已经为我解决了。将您的php.ini文件更改为

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

说明:php.ini文件的缺省设置为

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M

这就是为什么你不能上传大于2MB的图片。对于Windows,你可以在底部菜单栏的搜索栏中搜索php.ini,然后用编辑器编辑属性。

cwdobuhd

cwdobuhd3#

对于file_get_contents($_FILES ['image']['tmp_name']),如果错误为不能为空,则意味着在代码的html部分,它没有文件或没有附加任何内容。因此,首先通过回显值file_get_contents($_FILES ['image']['tmp_name'])来检查是否附加了任何内容。

93ze6v8z

93ze6v8z4#

<?php 
ini_set( 'display_errors', 0 );
error_reporting( E_ALL );
?>

相关问题