Sorun bir dosyayı yükleyerek sahip

2 Cevap php

Ben sorun dosya yükleyerek yaşıyorum. Her şeyden önce ben bir sınıf vardır:

class upload

{
private $name;
private $document;
public function __construct($nme,$doc)
{
    $this->setName($nme);
    $this->setDocument($doc);
}
public function setName($nme)
{
    $this->name = $nme;
}
public function setDocument($doc)
{
    $this->document = $doc;
}
public function fileNotPdf()
{
    /* Was the file a PDF? */
    if ($this->document['type'] != "application/pdf") 
        {
            return true;
        }
        else
        {
            return false;
        }
}
public function fileNotUploaded()
{
    /* Make sure that the file was POSTed. */
    if (!(is_uploaded_file($this->document['tmp_name'])))
    {
        return true;
    }
    else
    {
        return false;
    }
}
public function fileNotMoved($repositry)
{
        /* move uploaded file to final destination. */
        $result = move_uploaded_file($this->document['tmp_name'],
        "$repositry/$this->name.pdf");

        if($result)
        {
            return false;
        }
        else
        {
            return true;
        }
}
}

Şimdi benim ana sayfa için:

$docName = $_POST['name'];

$page = $_FILES['doc'];

if($_POST['submit'])

{
/* Set a few constants */
$filerepository = "np";
$uploadObj = new upload($docName, $page);
if($uploadObj->fileNotUploaded()) 
{
    promptUser("There was a problem uploading the file.","");
}
elseif($uploadObj->fileNotPdf())
{
    promptUser("File must be in pdf format.","");
}
elseif($uploadObj->fileNotMoved($filerepository))
{
    promptUser("Dosya nihai hedef tarih olamazdı.","");
}
else
{       
    promptUser("File has been successfully uploaded.","");
}
}

Ben olsun hatalar:

Warning: move_uploaded_file (about.pdf) [function.move-tarih-file]: failed to open stream: Lütfen Böyle bir dosya ya da dizin ..

Warning: move_uploaded_file () [function.move-tarih-file]: taşınamıyor 'c: \ xampp \ tmp \ php13.tmp' about.pdf 'için içeri ..

Dosya nihai hedef tarih olamazdı.

2 Cevap

The manual diyor ki:

filename geçerli bir yükleme dosyası, ama nedense hareket olamaz, hiçbir eylem ortaya çıkar, ve move_uploaded_file() FALSE dönecektir. Ayrıca, bir uyarı verilecektir.

Bu kılavuza göre, bir uyarı verilir, tek durum, bu yüzden ben bu dosyayı taşımaya çalışırsanız ne olur olduğunu varsayalım.

move_uploaded_file() hem safe mode ve open_basedir farkındadır. filename böyle bir kısıtlama ile çakışabilir hangi yüklenen dosyaların hareketli izin Ancak, kısıtlamalar sadece hedef yolu üzerine yerleştirilir. move_uploaded_file() PHP ile yüklenen yalnızca bu dosyalar taşınacak izin vererek bu işlemin güvenliğini sağlar.

Benim sonuç: kodunuzu hiçbir hata yoktur, PHP yapılandırma hedef dizine dosyayı taşımak için izin vermez. Sen safe mode dayattığı sınırları araştırma gerekir ve tam olarak taşıma işlemi başarısız neden open_basedir görmek için.

Ben "my_file" gibi bir dosya yüklerseniz, "$repositry/$this->name.pdf" np/my_file.pdf değerlendirecek. Bu tmp dizini içinde hedef dizini koymak olacaktır. Tmp dizin zaten mevcut ve yazılabilir, bu yüzden np dizin tmp dizin içinde var olduğundan emin olmalısınız. Eksik eğer move_uploaded_file() fonksiyonu otomatik olarak oluşturmaz. np dizin eksik, ben sen aynı hataları başlamıştı.

Ayrıca tmp dizininin bir alt dizinine yüklenen dosyaları kaydetmek gerektiğini unutmayın. Ben XAMPP kullanımı ve ben kodunuzu çalıştırdığınızda yüklenen dosya tmp/np taşındı ve daha sonra hemen silinir.