Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] multipart/form-data bez formularza
Forum PHP.pl > Forum > Przedszkole
JamalBIG
Witam

Czy jest mozliwe zastosowanie enctype="multipart/form-data" z funkcji <form> bez tej funkcji? Dokladnie chodzi mi o to, ze mam skrypt odpalany cronem ktory sam zapisuje pliki i teraz te pobierane pliki chce przepuscic przez inny skrypt ktory uzywa plikow 'po enctype' czyli w formie $_FILES[nazwa]...

Z gory dzieki za pomoc
Pozdrawiam
wookieb
Cytat(JamalBIG @ 31.03.2009, 14:12:43 ) *
enctype="multipart/form-data" z funkcji <form> bez tej funkcji?

A skąd masz taką wiedzę tajemną iż <form> to funkcja??


Cytat(JamalBIG @ 31.03.2009, 14:12:43 ) *
plikow 'po enctype' czyli w formie $_FILES[nazwa]...

Możesz wysłac curlem z opcja
Cytat
CURLOPT_POSTFIELDS The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path. This can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array with the field name as key and field data as value.

http://php.net/curl_setopt
JamalBIG
A moglbys mi wyjasnic gdzie powinien prowadzic adres w CURLOPT_URL?

Juz sam nie wiem co zle robie... Kod w pliku pobierajacym dane z sieci mam taki:
  1. <?php
  2. $ch = curl_init();
  3. $data = array('name' => 'filex', 'file' => $url[$x]);
  4. curl_setopt($ch, CURLOPT_URL, 'http://localhost/.../pobieranie.php');
  5. curl_setopt($ch, CURLOPT_POST, 1);
  6. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  7. curl_exec($ch);
  8. ?>

Skrypt z pobieranie.php jest taki:
  1. <?php
  2. $fp = fopen("test/".$_FILES['filex']."", "x+");
  3. if (!fwrite($fp, file_get_contents($_FILES['filex']))) {
  4.  fclose($fp);
  5. }
  6. ?>


Sprawdzajac zauwazylem ze poprostu '$_FILES['filex']' jest puste... Juz nie wiem co robie zle...
wookieb
Przeciez zacytowałem ci ze jezeli chcesz wyslac link to przed jego nazwa musisz dac @. Jest nawet w przykladach w linku ktory podałem smile.gif
cojack
Tam Ci kolego brakuje
Kod
$_FILES['filex']['name']


Pierw musisz przenieść plik do katalogu, move_upload_file, poczytaj manuala winksmiley.jpg

A jeżeli nie chcesz to możesz to zrobić w taki sposób że musisz użyć ['tmp_name'] zamiast name winksmiley.jpg poradzisz sobie.
JamalBIG
Rzeczywiscie nie wstawilem ale ciagle nic...
Kod wyglada teraz tak:
  1. <?php
  2. $ch = curl_init();
  3.        $data = array('name' => 'filex', 'file' => '@/test.jpg');
  4.        curl_setopt($ch, CURLOPT_URL, 'pobieranie.php');
  5.        curl_setopt($ch, CURLOPT_POST, 1);
  6.        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  7.        curl_exec($ch);
  8. ?>


wykin 'echo $_FILES' to 'Array' i plik nie zapisuje sie...

Juz pomijajac sam zapis potrzebuje miec wynik w $_FILES['filex'] i $_FILE['filex']['name'] a tu ciagle pusto i 'glucho'.... sad.gif
nospor
Cytat
wykin 'echo $_FILES' to 'Array'
bo files to tablica a echo z tablicy zawsze da ci Array.
zrob print_r($_FILES) to zobaczysz swoją tablice i co ona ma lub czego nie ma
JamalBIG
Nic nie ma... pusto i glucho... z print_r($_FILES) wyskakuje Array()... Juz nie mam pojecia co tu jest nietak... sad.gif macie jakis pomysl?
cojack
Kolego nie da sie pobrać w ten sposób plików, ja dopiero zobaczyłem co Ty chcesz zrobić biggrin.gif Ty nie pobierasz plików tylko dane biggrin.gif
Koledze radze poczytać o cUrlu winksmiley.jpg sie hakować zachciało i takie proste sposoby wymyślamy? No ja Cie proszę winksmiley.jpg

a locala to możesz sobie includować pliki.
JamalBIG
Nie chce nic hakowac tak jak na poczatku pisalem - mam skrypt pobierajacy pliki z RSS'a i teraz chce je poprzerabiac gotowym juz skryptem (zmniejszyc fotki itp) ale on potrzebuje dane w formie $_FILES['xxx'] (mam formularz ktory to robi przez enctype="multipart/form-data" a ja nie wiem jak to zrobic bez niego tylko zeby wszystko robilo sie samo)...

Jezeli nie da sie tak jak pisze to zawsze moge najpierw zapisac plik na dysku i potem go odczytac ale jak to zorbic zeby dane byly identyczne z tymi jak bym to zrobil formularze z enctype="multipart/form-data"?

Okroilem kod do minimum i ciagle mam pustke w $_FILES... Zauwazyliscie jakis blad?
  1. <?php
  2. $ch = curl_init();
  3.  
  4. $data = array('name' => 'Foo', 'file' => '@' . dirname(__FILE__) . '/test.png');
  5.  
  6. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  7.  
  8. curl_exec($ch);
  9.  
  10. print_r ($_FILES);
  11. ?>
nospor
przeciez curl odwoluje sie do innego skryptu i to ten skrypt dostanie $_FILES a nie ty
JamalBIG
a moglbys mi wytlumaczyc jak to w koncu zrobic jakims najlatwiejszym sposobem bo juz naprwde ten curl to dla mnie czarna magia... ;(
wookieb
Wstaw sobie w pobieranie.php
  1. <?php
  2. print_r ($_FILES);
  3. ?>


Dodaj do twojego curla kolejna opcje
  1. <?php
  2. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  3. echo curl_exec($ch);
  4. ?>


I teraz zobaczysz co zostalo przeslane do twojego pliku.
Po 2 na php.pl jest kurs curla.
JamalBIG
No i ciagle puste calkowita widze...

plik test.php wyglada teraz tak:
  1. <?php
  2. $ch = curl_init();
  3.  
  4. $data = array('name' => 'Foo', 'file' => '@' . dirname(__FILE__) . '/test.png');
  5.  
  6. curl_setopt($ch, CURLOPT_URL, 'pobieranie.php');
  7. curl_setopt($ch, CURLOPT_POST, 1);
  8. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  10.  
  11. echo curl_exec($ch);
  12. ?>


a plik pobieranie.php ma tylko taka zawartosc:

  1. <?php
  2. print_r ($_FILES);
  3. ?>


Moze wpadl komus w oko blad jak tutaj jest?
JamalBIG
problem rozwiazany - wystarczy podac pelen adres w CURLOPT_URL
  1. <?php
  2. curl_setopt($ch, CURLOPT_URL, 'http://localhost/pobieranie.php');
  3. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.