Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP download-skripti rikkoo tiedostot

Sivun loppuun

tomtomssi [15.08.2011 11:52:45]

#

Hei,
Elikä nyt on sattunut eteen ongelma download skriptin kanssa. Sen tarkoituksena on yksinkertaisesti ladata MySQL-tietokannasta sinne upattu tiedosto. .txt-tiedostot aukeavat aivan normaalisti, mutta kaikki muut tyypit ovat aukaistaessa vahingoittuneita. Itse uskoisin ongelman olevan headereissa. Näin muutaman kuukauden kokemuksella ottakaa arvaukseni varauksella. Tärkeintä olisi nyt saada PDF-tiedostot ladattua ja saada toimimaan.

function download($id) {

    $query = "SELECT * FROM store WHERE id={$id}";
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    $filename = $row['name'];
    $filesize = $row['size'];

    header("Content-Type: application/pdf");
    header("Content-Disposition: attachment; filename={$filename}");
    header("Content-Length: {$filesize}");
    echo $row['file'];

    exit;
}

Nyt jo useamman päivän tämän kanssa taistellut, joten ajattelin kysäistä apua. Kiitokset

The Alchemist [15.08.2011 11:58:28]

#

Sinun pitää tehdä se PDF-tiedosto jossain, jos aiot sellaisen käyttäjälle syöttää. Selain ei itse osaa mistään tekstitiedostosta PDF:ää vääntää.

tomtomssi [15.08.2011 12:04:37]

#

Jos käyttäjä on tietokantaan PDF-tiedoston upannut, niin eikö se tuon koodipätkän avulla pitäisi sieltä PDF:nä takaisin myös tulla?

Metabolix [15.08.2011 12:32:48]

#

Onko sarakkeesi varmasti tyypiltään BLOB eikä TEXT ja riittävän iso tiedostolle (eli luultavasti ainakin MEDIUMBLOB)?

tomtomssi [15.08.2011 13:37:48]

#

Kyllä, tyypiksi olin asettanut BLOB.

if (isset($_FILES['file'])) {
            $file = $_FILES['file']['tmp_name'];
            if (!isset($file) || empty($file)) {
                echo "Et ole valinnut tiedostoa!";
            } else {
                $uploaded_file = file_get_contents($_FILES['file']['tmp_name']);
                $uploaded_file_name = mysql_prep($_FILES['file']['name']);
                $time = mysql_prep(date('Y-m-d H:m:s'));

                $query = "INSERT INTO store
                VALUES ('', '$uploaded_file_name', '$uploaded_file', '$time')";
                $result = mysql_query($query);

Tuossa on sitten pätkä, jolla tiedosto upitaan tietokantaan. Tässä huomasin, että tiedoston koko pienenee huomattavasti, kun se päätyy tietokantaan. Olisiko yllä olevassa koodinpätkässä jotain häikkää?

The Alchemist [15.08.2011 13:38:50]

#

Laitahan ne virheilmoitukset päälle. $uploaded_filessä on arvo false, koska kyseistä tiedostoa ei ole olemassa.

Metabolix [15.08.2011 13:50:48]

#

Kuten sanoin, pelkkä BLOB on luultavasti liian pieni monille PDF-tiedostoille (vain 64 kilotavua).

The Alchemist on luultavasti nyt lukenut jotain väärin, kyllähän se tiedosto pitäisi juuri noin olla olemassa.

Päivämäärässä on virhe, m tarkoittaa kuukautta eikä minuutteja. Minuutit ovat i.

tomtomssi [15.08.2011 14:05:38]

#

Tuli katsottua sinun viestisi aluksi väärin. Lueskelin BLOB ja TEXT -tyypeistä hieman, ja kuten suosittelit vaihdoin BLOB-tyyppiä suuremmaksi. Tämä ratkaisi jo erittäin turhauttavaksi käyneen ongelmani. Tuli myös vanhingossa pastettua vanhempi pätkä tuosta upload-skriptistä, joten siitä uupuu suurin osa koodista, vaikka se toimiikin ja ajaa saman asian.

Kiitos molemmille vastauksistanne!

The Alchemist [15.08.2011 14:40:11]

#

Metabolix kirjoitti:

The Alchemist on luultavasti nyt lukenut jotain väärin, kyllähän se tiedosto pitäisi juuri noin olla olemassa.

No en ole kyllä ikinä katsonut, minne käyttäjien uploadaamat tiedostot menevät, mutten olettanut niiden olevan samassa hakemistossa kuin itse skriptikin on.

E: On siinä tosiaan se koko polku mukana eikä vain tiedoston nimi. Sen muistin sit väärin.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta