15

さて、私はこれに多くの時間を費やしています。私は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 番目のフィールドに画像ブロブがあり、それまでのすべてのフィールドが名、姓、およびそのようなランダムなものであるためです。どうすればこれを修正できますか? エラーを返しています:

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

どうすればいいのかわからない。

4

9 に答える 9

10

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

次の場所で簡単な例を確認できます。

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

于 2012-11-20T03:11:58.757 に答える
5

次の 2 つの新しいファイルを追加する必要があります。1 つは index.html で、以下のコードをコピーして貼り付けます。

 <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);
 ?>

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

于 2015-12-10T10:57:08.987 に答える
4

file_get_content()コード内のfunction を に変更しますfile_get_contents()。関数名の末尾に「s」がありません。そのため、未定義の関数エラーが発生しています。

file_get_contents()

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

"INSERT INTO content VALUES         ('','','','','','','','','','$image_name','$image',)
于 2012-11-20T03:00:12.523 に答える
2

画像をサーバーに保存してから、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 準備済みステートメントを使用することをお勧めします。

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

于 2018-10-05T10:29:05.290 に答える