Autor Zpráva
Monča
Profil *
Ahojky, zkoušela jsem funkci na import dat v xml funkci simplexml_load_file, což mi funguje normálně bez problémů, když mám soubor xml, ale šéfová po mě chce, abych přímo pracovala se souborem v zipu, který to xmlko obsahuje a bohužel, tam jsem narazila. Díky za každou informaci Monča.
panther
Profil
Monča:
cilize? Potrebujes na server rozbalit ZIP soubor?

Toto by mohlo byt pouzitelne, zkus.
ShiraNai7
Profil
Jde to jednoduše i bez rozbalování:

$xml = simplexml_load_file('zip://'.__DIR__.'/test.zip#test.xml');
Monča
Profil *
Jj, díky zkusím M.


Jsem to zkoušela takhle a nic:(
$xml = simplexml_load_file('http://localhost/test/'.zipy.'/archive.zip#data.xml');
Prochy
Profil
Ale dyť ti tam ShiraNai7 píše, že tam je zip a ne html, to znamená, že např. když budeš mít soubor ve stejný složce jako načítaná stránka, tak to budeš mít takto $xml = simplexml_load_file('zip://archive.zip#data.xml');, když to budeš mít v nějaký nadřazený složce, tak např.
$xml = simplexml_load_file('zip://../cestaSArchivem/archive.zip#data.xml');
ShiraNai7
Profil
Monča, Prochy:
Na cestu pozor.. musí být absolutní (nebere ohled na aktuální adresář), takže třeba takto:

$xml = simplexml_load_file('zip://'.realpath('./zipy/archive.zip').'#data.xml');

Nevím, kde se ten skript spouští a jestli je ten ZIP vůbec na lokálním serveru.
Prochy
Profil
ShiraNai7:
Pro jistotu sem si to otestoval na hostingu, a mě tam fungovala relativní cesta, co jsem zde uváděl.
Monča
Profil *
Už to funguje, děkuji všem


Funguje to teda akorát na localhostu, ale když mám ten soubor na www.nejakadomena.cz/data.zip resp. se odkazuju na jiný server, tak mi to nechodí :-(

$xml = simplexml_load_file('zip://'.'http://www.nejakadomena/data.zip'.'#data.xml');
shaggy
Profil
Monča:
ale když mám ten soubor na www.nejakadomena.cz/data.zip resp. se odkazuju na jiný server
Predpokladám, že nie si technicky nezdatný človek (keďže programuješ v php, dokonca sa snaží otvoriť zip a parsovať xml), preto mi je záhadou, či naozaj nechápeš, o čo sa vlastne snažíš.
Nevidíš v tvojom kóde chybu?
Myslíš, že zip://http:// je správny zápis?

Myslíš, že ti bude fungovať doména, ako cesta, keď ti ShiraNai7 jasne napísal, že
Na cestu pozor.. musí být absolutní
a
a jestli je ten ZIP vůbec na lokálním serveru
?
Monča
Profil *
Testovala jsem to na localhostu ... tam to bylo v pořádku, protože jsem ten zip měla přímo u sebe, ale jinak ten .zip bude na cizí doméně dodavatele


Jak to zprovoznit mimo localhost nevím :-(
shaggy
Profil
Monča:
Testovala jsem to na localhostu ... tam to bylo v pořádku
To je logické. Písala si to a písali to aj ostatní.

Jak to zprovoznit mimo localhost nevím
Čo takto si ten zip stiahnuť k sebe a pokračovať v postupe uvedenom vyššie?
Monča
Profil *
Když si to stáhnu k sobě tak to neřeší můj problém, na doméně mi to funguje jak na localhostu, ale potřebuji se odkazovat cestou přes http na zip na cizí doménu aniž bych to k sobě stahovala.
shaggy
Profil
Monča:
Ako myslíš, že sa ten zip rozbalí bez toho, aby si to stiahla k sebe? Kam sa tie dáta rozbalia? Na cudzí server? Nezaškodilo by rozmýšľať nad tým, čo robíš.
Pozri, rady si dostala, ak to od teba chce "šéfová", predpokladám, že si platená za programovanie, preto očakávam aj určitú dávku sebestačnosti a vlastnej iniciatívy.
Monča
Profil *
Tak tohle funguje na přímo, aniž bych to rozbalovala $xml = simplexml_load_file('zip://'.realpath('./zipy/archive.zip').'#data.xml');. Jde mi to, nahradit tu cestu přímo odkazem na cizí doménu, kde je zip.

Řešení co mi navrhuješ, je stáhnout zip soubory k sobě a pak použít simplexml_load_file, jednoduší mi to připadá na přímo.

Ale i tak děkuju.
shaggy
Profil
Monča:
Jde mi to, nahradit tu cestu přímo odkazem na cizí doménu,
Asi to budeš brať ako urážku, ale na tvojom mieste by som zvážil svoju programátorskú dráhu, pretože stále opakuješ to isté a nevieš pochopiť to, čo sa ti snažíme vysvetliť. Budú ťa čakať oveľa ťažšie úlohy, ako táto, relatívne primitívna.
Ten súbor je fyzicky na inom stroji. Nemáš práva na zapisovanie na ten stroj. Ako chceš tie súbory rozbaliť? Pretože oni sa musia rozbaliť.
Aj keby s nimi server pracoval iba v operačnej pamäti, stále sa to musí "stiahnuť" k tebe.

Nevidím problém v tom, aby sa súbor stiahol, lokálne rozbalil a zmazal. Ale ako vravím - od programátora, ktorý je za to platený, očakávam, že mu takéto triviálne veci nebudem musieť opakovať.
ShiraNai7
Profil
Monča:
jednoduší mi to připadá na přímo.

Nejde to přímo. zip:// funguje jen na lokální soubory. Musíš si ZIP soubor lokálně stáhnout a až pak s ním půjde pracovat. Sepsal jsem relativně krátký skript.. Tučně označené části by tě měly zajímat.

(edit: kdybych si předtím pořádně přečetl tvou reakci, asi bych se na to raději vykašlal)

// konfigurace
$zipFileUrl = 'http://nejakadomena.tld/data.zip'; // adresa ZIPu
$xmlFileName = 'data.xml'; // cesta ke XML souboru uvnitr ZIPu

// ziskani xml ze zipu na dane url
$error = false;
$tmpFileCreated = false;
do {

    // stazeni zip souboru
    $zipFileContents = file_get_contents($zipFileUrl);
    if(false === $zipFileContents) {
        $error = 'Nepodarilo se stahnout ZIP soubor';
        break;
    }

    // ulozeni zip souboru
    $tmpFileName = '.'.DIRECTORY_SEPARATOR.uniqid('zip', true).'.zip';
    if(false === file_put_contents($tmpFileName, $zipFileContents)) {
        $zipFileContents = null;
        $error = 'Nepodarilo se ulozit ZIP soubor do docasneho souboru';
        break;
    }
    $tmpFileCreated = true;
    $zipFileContents = null;

    // precteni
    $zip = new ZipArchive;
    $status = $zip->open($tmpFileName);
    if(true === $status) {

        $xml = simplexml_load_string(stream_get_contents($zip->getStream($xmlFileName)));
        $zip->close();

    } else {

        // chyba
        $error = 'Nepodarilo se precist ZIP soubor';
        break;

    }

} while(false);

// odstraneni docasneho souboru
if($tmpFileCreated) {
    unlink($tmpFileName);
}

// zpracovani xml
if(false === $error) {

    ///////////////////////////////////
    // zde uz muzeme pracovat s $xml //
    //////////////////////////////////
    echo "OK ";
    var_dump($xml);

} else {

    // chyba
    echo "CHYBA - {$error}";

}
Monča
Profil *
Moc díky :-)
shaggy
Profil
Monča:
Moc díky
Takže problém nebol v tom, že by si to nechcela sťahovať k sebe, ale v tom, že si lenivá to urobiť a chcela si, aby to ostatní urobili za teba.
Nikdy ma neprestane udivovať, ako dnešní rádoby-programátori považujú ochotu druhých za samozrejmosť. To sú chvíle, kedy mám rád prístup ako na stackoverflow, kde pre podobných lenivcov nemajú pochopenie.

Ospravedlňujem sa vedeniu za OT, ale naozaj ma nahnevá, keď dám človeku dobrú radu a jemu sa nepáči iba preto, že som mu pred hubu nenaservíroval hotový kód. Jednoducho nemám rád flákačov a príživníkov.
Monča
Profil *
Nechtěla jsem, aby to za mě někdo udělal, jak píšeš, ale nevěděla jsem si rady, dost dlouho jsem se v tom zamotávala a myslela jsem, že to prostě půjde nějak bez ukládání. Ale to je už jedno, je mi jasný, že nejsem programátorka třeba jako ty, ale zase jsem ráda, že se najdou lidi co rádi pomůžou a navíc mě to posune i dál. Už se v tom nebudu dál hrabat. Díky všem co se mi snažili pomoci. M.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0