Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z załącznikiem *.xml
Forum PHP.pl > Forum > PHP
new_user
Witam

Mam zrobony jeden skryp do generowania pliku xml z bazy postgres.
Składnia wygenerowanego gotowego i zapisanego na serwerze pliku wygląda podobnie do tej ponizej:

  1. <?xml version="1.0" encoding="ISO-8859-2" ?>
  2. <data>
  3.      <header>
  4.            <column name="1" type="int4" />
  5.            <column name="2" type="text" />
  6.            <column name="3" type="text" />
  7.            <column name="4" type="text" />
  8.            <column name="5" type="text" />
  9.            <column name="6" type="text" />
  10.            <column name="7" type="text" />
  11.  
  12.      </header>
  13.      <records>
  14.            <row>
  15.                  <column name="1">1</column>
  16.                  <column name="2">2</column>
  17.                  <column name="3">2</column>
  18.                  <column name="4">4</column>
  19.                  <column name="5">5</column>
  20.                  <column name="6">6</column>
  21.                  <column name="7">7</column>
  22.            </row>
  23.      </records>
  24. </data>


drugi skrypt wysyłający wysyła ten plik na wskazany adres email. Wszystko działa dobrze tylko jedno jest nie tak.
Plik który na serwerze jest poprawnym xml (kod powyżej) po przesłaniu i odebraniu a następnie otworzeniu odebranego pliku xml ma składnię podobna do ponizszej:

  1. <?xml version=\"1.0\" encoding=\"ISO-8859-2\" ?>
  2. <data>
  3.      <header>
  4.            <column name=\"1\" type=\"int4\" />
  5.            <column name=\"2\" type=\"text\" />
  6.            <column name=\"3\" type=\"text\" />
  7.            <column name=\"4\" type=\"text\" />
  8.            <column name=\"5\" type=\"text\" />
  9.            <column name=\"6\" type=\"text\" />
  10.            <column name=\"7\" type=\"text\" />
  11.  
  12.      </header>
  13.      <records>
  14.            <row>
  15.                  <column name=\"1\">1</column>
  16.                  <column name=\"2\">2</column>
  17.                  <column name=\"3\">2</column>
  18.                  <column name=\"4\">4</column>
  19.                  <column name=\"5\">5</column>
  20.                  <column name=\"6\">6</column>
  21.                  <column name=\"7\">7</column>
  22.            </row>
  23.      </records>
  24. </data>


Skryt wysyłający wygląda tak:

  1. <?php 
  2. $boundary = "-->===_53414723_===<---->>4221==_"; 
  3.  
  4. $header = "From: from\n"; 
  5. $header = $header . "Reply-To: replyto\n"; 
  6. $header = $header . "X-Mailer: PHP\n"; 
  7. $header = $header . "X-Sender: from\n"; 
  8. $header = $header . "MIME-version: 1.0\n"; 
  9. $header = $header . "Content-type: multipart/mixed; "; 
  10. $header = $header . "boundary=\"$boundary\"\n"; 
  11. $header = $header . "Content-transfer-encoding: 8bit\n"; 
  12. $header = $header . "X-attachments: plik.xml;\n\n"; 
  13.  
  14. $mesg = "--" . $boundary . "\n"; 
  15. $mesg = $mesg . "Content-Type: text/plain; charset=\"iso-8859-2\"\n\n"; 
  16. $mesg = $mesg . $message . "\n"; 
  17. $mesg = $mesg . "--" . $boundary . "\n"; 
  18. $mesg = $mesg . "Content-type: text/xml; name=\"plik.xml";&#092;n";  
  19. $mesg = $mesg . "Content-Transfer-Encoding: base64\n"; 
  20. $mesg = $mesg . "Content-disposition: attachment; filename= \"plik.xml\"\n\n"; 
  21. $mesg = $mesg . encoding($filename) . "\n";
  22. $mesg = $mesg . "--" . $boundary . "-- \n";
  23.  
  24. function encoding($file) { 
  25. if (is_readable($file)) { 
  26.  $fd = fopen($file, "r"); 
  27.  $plik = fread($fd, filesize($file)); 
  28.  $encoded = chunk_split(base64_encode($plik)); 
  29.  fclose($fd);  
  30. } 
  31. return $encoded; 
  32. } 
  33.  
  34. mail("mail@serwer.pl", "TEMAT MAILA", $mesg, $head);
  35. ?>


Co zrobić żeby mail plik był wysłany w formacie takim jak jest na serwerze a nie przetworzony i przed " jest wstawione \.
nevt
wyedytuj swoj post i dodaj znaczniki [ php ] do swojego kodu...
później spróbuj zamiast:
  1. <?php
  2. $fd = fopen($file, "r"); 
  3.  $plik = fread($fd, filesize($file));
  4.  fclose($fd);
  5. ?>

po prostu uzyć:
  1. <?php
  2. $plik = file_get_contents($file);
  3. ?>
new_user
Zastosowałem twoją wskazówkę i nadal takie same objawy.

Probowalem stworzyc nawet cos takiego jak plik z rozszerzeniem *.msg o tresci podobnej
  1. User-Agent: CC MDA 1.1.6
  2. MIME-Version: 1.0
  3. Message-ID: <LA1LylA1.ZkL_dW7bB3pHainMEPHipIV@domena.pl.pl>
  4. From: odkogo
  5. Subject: test
  6. To: adres@serwer.pl
  7. Date: Thu, 27 Mar 2008 10:15:42 +0100
  8. Content-Type: multipart/mixed;
  9. boundary="----STnXdz14mka1eS0LzehMmyUWHUZXwTXVtIs1LZNe"
  10. X-Sender-Email: adres@serwer.pl
  11.  
  12. This is a multi-part message in MIME format.
  13. ------STnXdz14mka1eS0LzehMmyUWHUZXwTXVtIs1LZNe
  14. Content-Transfer-Encoding: quoted-printable
  15. Content-Type: text/plain; charset="iso-8859-2";
  16. content-transfer-encoding=quoted-printable; name="2008-03-26.xml"
  17. Content-Disposition: attachment; filename="2008-03-26.xml"
  18. <?xml version="1.0" encoding="ISO-8859-2" ?>
  19. <data>
  20. <header>
  21. <column name="1" type="int4" />
  22. <column name="2" type="text" />
  23. <column name="3" type="text" />
  24. <column name="4" type="text" />
  25. <column name="5" type="text" />
  26. <column name="6" type="text" />
  27. <column name="7" type="text" />
  28. </header>
  29. <records>
  30. <row>
  31. <column name="1">1</column>
  32. <column name="2">2</column>
  33. <column name="3">3</column>
  34. <column name="4">4</column>
  35. <column name="5">5</column>
  36. <column name="6">6</column>
  37. <column name="7">7</column>
  38. </row>
  39. </records>
  40. </data>
  41. ------STnXdz14mka1eS0LzehMmyUWHUZXwTXVtIs1LZNe--

Jednak tu tez mam problem odebrany mail ma poucinane znaki typu name="7", type="7" i zamiast takich w odebranym mam na type="czyli bez dwoch pierwszsych znaków. Czyli coś takiego
  1. <?xml version=.0" encoding=SO-8859-2" ?>
  2. <data>
  3. <header>
  4. <column name=" type=nt4" />
  5. <column name=" type=ext" />
  6. <column name=" type=ext" />
  7. <column name=" type=ext" />
  8. <column name=" type=ext" />
  9. <column name=" type=ext" />
  10. <column name=" type=ext" />
  11. </header>
  12. <records>
  13. <row>
  14. <column name=">1</column>
  15. <column name=">2</column>
  16. <column name=">3</column>
  17. <column name=">4</column>
  18. <column name=">5</column>
  19. <column name=">6</column>
  20. <column name=">7</column>
  21. </row>
  22. </records>
  23. </data>

Mało tego to jak jest jakis link w tresci tez mi zamienia znaki np końcówka adresu jest taka id=8380 a w odebranym mam idâ80

Bardzo proszę o pomoc.


OK poradziłem sobie.
Po prostu trzeba było przeparsować zmienne ze znakami = i dodac dwa dodatkowe znaki.
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.