PHP - ayrıştırma çok parçalı form verilerini

6 Cevap php

Bir dosya yükleme, ve bir metin alanı - Ben iki alan vardır bir HTML POST-ed formu araya getirmek için çalışıyorum. Form dosya yükleme için bir tür multipart / form-data olduğundan, ben normal bir PHP $ _POST değişkeni ile metin alanına alınamıyor. Peki nasıl PHP ile formda metin alanına alabilirim?

Talep başı olarak, temelde burada Andrew doğrudan alınan bazı kod:

<html>
    <body>
        <form action="test2.php" method="post" enctype="multipart/form-data">
            Name: <input type="text" name="imageName" />
            Image: <input type="file" name="image" />
            <input type="submit" value="submit" />
        </form>
    </body>
</html>

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>

İşte tüm test dosyası. Ben EncType kaldırırsanız, ben tabii dosya POST-ed veri almak, ama olamaz. Multipart / form-data olarak enctype ile, dosya alabilirsiniz, fakat POST-ed veri yok.

İşte enctype ile çıkış bulunuyor:

array(5) {
  ["name"]=>
  string(34) "testing.png"
  ["type"]=>
  string(0) ""
  ["tmp_name"]=>
  string(0) ""
  ["error"]=>
  int(1)
  ["size"]=>
  int(0)
}

Olmadan:

testing

NULL

Aynı tam giriş iki kere.

6 Cevap

Dosya yüklenenler $ HTTP_POST_FILES gelmez. Her şey (form yöntemi 'Post' olduğunu varsayarak) $ _POST ile geliyor.

Yazınızı limitinizi kontrol edin. Ben bu neden ne anlamaya çalışıyorum deli gidiyordu. Apache hata günlüğüne hızlı bir onay sonrası içerik uzunluğu sınırı aştığını gösterdi. Limitini yükselterek sonra yazılan veri mevcut değildir.

$_POST metin alanı için sadece iyi çalışması gerekir. Sen gerçek dosya için $_FILES kullanmanız gerekecektir. Aşağıdaki HTML Verilen:

<html>
  <body>
    <form action="self.php" method="post" enctype="multipart/form-data">
      Name: <input type="text" name="imageName" />
      Image: <input type="file" name="image" />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

Sen tarlalar şu şekilde erişebilirsiniz:

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>

Senin kod ile yanlış bir şey yok; sunucu konfigürasyonu ile ilgili bir sorun olabilir.

<form action="" method="post" enctype="multipart/form-data"> 
 Name: <input type="text" name="imageName"> 
 Image: <input type="file" name="image"> 
 <input type="submit" value="submit"> 
</form> 

<?php var_dump($_POST, $_FILES); ?>

Script: http://sandbox.phpieceofcake.com/upload/1246558881125336.php
Source: http://sandbox.phpieceofcake.com/upload/1246558881125336.phps

[2010-02-13 10:57 UTC] yahoo dot com at sudeshkmr

Ben aynı sorunla karşı karşıya ve hiçbir şey çalıştı. Windows Vista üzerinde Apache 2.2, PHP 5.3 test ettik. Ben de Apache 2.2 ve PHP 5.3 ile Ubuntu (karmik) üzerinde test. Ben de nginx 0.8 ve PHP 5.3 ile test edilmiştir.

Sonra geçici bir çözüm buldum. Action = "" parametresi dosya yükleme formu var hangi komut sayfa kendisi olmamalıdır. Örneğin, yükleme formu ile bir sayfa index.php var.

Action = "upload.php" <-------- Bu sayfa dosya yükleme formu sayfa daha farklı olmak zorunda, ve PHP tüm yapılandırmalar üzerinde çalışıyor!

Eylem parametresi için kullanmayın.

Lütfen webservices bu uygulaması ile çok parçalı verileri krom kalan istemci uzantısı kullanarak iyi çalışıyor veya yükleme olup olmadığını kontrol edebilirsiniz - http://itunes.apple.com/us/app/rest-client/id503860664?ls=1&mt=8