web-dev-qa-db-ja.com

PHP画像をアップロード

これに多くの時間を費やす方法があります。私はPHPプログラミングに慣れていて、基本を理解しようとしていますが、昨夜の時点で少し迷っています。PHPフォームを取得することができました名前アドレスなどの基本的なデータを私の(MySQL)サーバーにアップロードします。

しかし今日は、サーバーへのイメージになる次のステップを実行してみましょう。私はYouTubeで3つのビデオを見たことがあります。おそらく100回だけコードを再コピーして、さまざまな方法で試してみました。

http://www.youtube.com/watch?v=CxY3FR9doHI
http://www.youtube.com/watch?v=vFZfJZ_WNC4&feature=relmfu

まだ入手できていません。

しかし、長い話をまとめると、サーバーに接続するconfig.phpファイルがあり、アップロードフォームページで実行しているコードは次のとおりです。

<html>
  <head>
    <title>Upload an image</title>
  </head>
<body>
  <form action="UploadContent.php" method="POST" enctype="multipart/form-data">
  File:
    <input type="file" name="image"> <input type="submit" value="Upload">
  </form>
<?php

// connect to database
include"config.php";

// file properties
$file = $_FILES['image']['tmp_name'];

if (!isset($file))
  echo "Please select a profile pic";
else
{
  $image = addslashes(file_get_content($_FILES['image']['tmp_name']));
  $image_name = addslashes($FILES['image']['name']);
  $image_size = getimagesize($_FILES['image']['tmp_name']);

  if ($image_size==FALSE)
    echo "That isn't a image.";
  else
  {
    $insert = mysql_query("INSERT INTO content VALUES ('','','','','','','','','','$image_name','$image',)");
  }
}
?>
  </body>
</html>

すべての理由'', '', '', ''挿入行は、10番目のフィールドに名前があり、11番目に画像ブロブがあり、その前にあるのはすべて、名、姓、およびそのようなランダムなものです。どうすれば修正できますか?それはエラーを返しています:

致命的なエラー:/home/content/34/9587634/html/WEBPAGE/UploadContent.phpの22行目の未定義関数file_get_content()の呼び出し

どうすればいいかわかりません。

6
user1544586

このコードは、指定されたファイルがアップロードに有効かどうかをチェックするmove_uploaded_file()関数の呼び出しを見逃しています。

次の場所で簡単な例を確認してください。

http://www.w3schools.com/php/php_file_upload.asp

8

コードの関数file_get_content()file_get_contents()に変更します。関数名の最後に 's'がありません。そのため、未定義の関数エラーが発生します。

file_get_contents()

行に$imageを入力した後、最後の不要なカンマを削除します

"INSERT INTO content VALUES         ('','','','','','','','','','$image_name','$image',)
4
Mudassir Hasan

2つの新しいファイルを追加する必要があります。1つはindex.html、以下のコードをコピーして貼り付け、もう1つはイメージをアップロードするimageup.phpです。

 <form action="imageup.php" method="post" enctype="multipart/form-data">
 <input type="file" name="banner" >
 <input type="submit" value="submit">
 </form>

 imageup.php
 <?php
 $banner=$_FILES['banner']['name']; 
 $expbanner=explode('.',$banner);
 $bannerexptype=$expbanner[1];
 date_default_timezone_set('Australia/Melbourne');
 $date = date('m/d/Yh:i:sa', time());
 $Rand=rand(10000,99999);
 $encname=$date.$Rand;
 $bannername=md5($encname).'.'.$bannerexptype;
 $bannerpath="uploads/banners/".$bannername;
 move_uploaded_file($_FILES["banner"]["tmp_name"],$bannerpath);
 ?>

上記のコードは、暗号化された名前で画像をアップロードします

3
Kannan Chakkara

画像をサーバーに保存してから、URLをMYSQLデータベースに保存することをお勧めします。

最初に、検証されていないファイルが巨大なセキュリティリスクにつながる前に、画像に対してさらに検証を行う必要があります。

  1. 画像を確認

    if (empty($_FILES['image']))
      throw new Exception('Image file is missing');
    
  2. 画像を変数に保存する

    $image = $_FILES['image'];
    
  3. アップロード時間エラーを確認する

    if ($image['error'] !== 0) {
       if ($image['error'] === 1) 
          throw new Exception('Max upload size exceeded');
    
       throw new Exception('Image uploading error: INI Error');
    }
    
  4. アップロードされたファイルがサーバーに存在するかどうかを確認します

    if (!file_exists($image['tmp_name']))
        throw new Exception('Image file is missing in the server');
    
  5. ファイルサイズを検証します(必要に応じて変更します)

     $maxFileSize = 2 * 10e6; // = 2 000 000 bytes = 2MB
        if ($image['size'] > $maxFileSize)
            throw new Exception('Max size limit exceeded'); 
    
  6. 画像を検証します(ファイルが画像かどうかを確認します)

     $imageData = getimagesize($image['tmp_name']);
         if (!$imageData) 
         throw new Exception('Invalid image');
    
  7. 画像のMIMEタイプを検証する(必要に応じてこれを行います)

     $mimeType = $imageData['mime'];
     $allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];
     if (!in_array($mimeType, $allowedMimeTypes)) 
        throw new Exception('Only JPEG, PNG and GIFs are allowed');
    

これは、PHPで安全な画像アップロードスクリプトを作成するのに役立ちます。

コードソース: https://developer.hyvor.com/php/image-upload-ajax-php-mysql

さらに、セキュリティを向上させるために、クエリに MYSQLI準備済みステートメント を使用することをお勧めします。

ありがとうございました。

2
Supun Kavinda

単純なPHP file/image upload同じページのコード。

<form action="" method="post" enctype="multipart/form-data">
  <table border="1px">
    <tr><td><input type="file" name="image" ></td></tr>
    <tr><td> <input type="submit" value="upload" name="btn"></td></tr>
  </table>
</form>

 <?php
   if(isset($_POST['btn'])){
     $image=$_FILES['image']['name']; 
     $imageArr=explode('.',$image); //first index is file name and second index file type
     $Rand=rand(10000,99999);
     $newImageName=$imageArr[0].$Rand.'.'.$imageArr[1];
     $uploadPath="uploads/".$newImageName;
     $isUploaded=move_uploaded_file($_FILES["image"]["tmp_name"],$uploadPath);
     if($isUploaded)
       echo 'successfully file uploaded';
     else
       echo 'something went wrong'; 
   }

 ?>
0
Majbah Habib

このコードは、phpでファイルをアップロードするのが非常に簡単です。このコードでは、同じページでアップロードタスクを実行しています。つまり、htmlとphpの両方のコードが同じファイルに存在します。このコードは、イメージ名の新しい名前を生成します。

まず最初にhtmlコードを見てください

<form action="index.php" method="post" enctype="multipart/form-data">
 <input type="file" name="banner_image" >
 <input type="submit" value="submit">
 </form>

今phpコードを見てください

<?php
$image_name=$_FILES['banner_image']['name'];
       $temp = explode(".", $image_name);
        $newfilename = round(microtime(true)) . '.' . end($temp);
       $imagepath="uploads/".$newfilename;
       move_uploaded_file($_FILES["banner_image"]["tmp_name"],$imagepath);
?>
0
  <?php 
 $target_dir = "images/";
    echo $target_file = $target_dir . basename($_FILES["image"]["name"]);
    $post_tmp_img = $_FILES["image"]["tmp_name"];
    $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
    $post_imag = $_FILES["image"]["name"];
        move_uploaded_file($post_tmp_img,"../images/$post_imag");
 ?>
0
saad mohmed