[PHP]API - problem z dostępem do pliku |
[PHP]API - problem z dostępem do pliku |
24.04.2019, 16:11:33
Post
#1
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) |
Cześć,
Używam API napisane w PHP do generowania dokumentów (System generuje mi zestawienie sprzedaży dla danego klienta w docx). Niestety mój developer który mi to zrobił kilka lat temu nie jest już zainteresowany inwestowaniem swojego czasu potrzebuję pomocy. Sam ogarniam podstawy i potrafię wykonać większość modyfikacji jakie potrzebuję, ale niestety z tym nie potrafię sobie poradzić. System zapisuje wygenerowane pliki na serwerze. Mój developer na pewnym etapie prac dodatkowo załatał jeszcze jedną dziurę bezpieczeństwa, czyli pobieranie wygenerowanych dokumentów docx bezpośrednio przez serwer http, czyli bez potrzeby logowania. Logowanie obejmuje tylko dostęp do php, pliki statyczne w tym dokumenty docx są serwowana bezpośredni przez serwer http z pominięciem php. Przerobił to tak, żeby te pliki także szły przez php. W tej chwili jak wykomentuje to o co mi chodzi pliki zapisują się w jednej lokalizacji documents/. Chiciałem zrobić, żeby każdy agent miał pliki w swoim katalogu czyli documents/PiotrP drugi documents/MarcinS itd. Niestety ale mam problem. Nie wiem czy to co wrzucę jest wystarczające no ale spróbuję opisać do czego doszedłem: plik DocumentGenerate.php
Dzięki temu generuje się link do pliku do pobrania. Plik generuje się prawidłowo w odpowiedniej lokalizacji dla tych trzech użytkowników. Dodam że oryginalnie nie było tych if /else if i wszystko zapisywało sie w katalogu głównym documents/ Plik drugi getDocument.php (chyba tutaj jest jakiś problem) odpowiada za możliwość pobrania tych plików. Obecnie wygląda tak:
No i niestety ale nie mogę pobrać tych wygenerownych plików. Po kliknięciu na link zamiast okna do zapisu pliku dostaję komunikat: {"status":"ERR","message":[{"body":"C:\\wamp\\www\\api\\document\/XXX_Zbigniew_20190424_170454_other_en.docx","type":"danger"}]} Tak jakby nie działały te if w drugim pliku. Przykład który pokaże może gdzie problem. Powiedzmy, że generuję plik dla agenta Piotr aaa. Plik zapisuje się prawidłowo w katalogu documents/PiotrP. Przy tym co wyżej, nie mogę pobrać pliku (komunkiat o błędzie). Ale jak dla testów dopiszę w drugim pliku w tej linijce:
lokalizajcę gdzie zapisał sie pliki czyli ;
to wszystko działa prawidłowo i w momencie kliknięcie linku otwiera okno z zapisem pliku. Mam nadzieję że to co napisąłem ma jakiś sens. System jest dość rozbudowany i składa się z 30-40 plików ale oczywiście większość myślę że jest tutaj bez znaczenia. Drugi plik podałem w całości. Pierwszy tylko fragment ale tam myśle ze wszystko działa bo zapisuje prawidłowo. Dziękuję za wskazówki / podpowiedzi Ten post edytował pela222 24.04.2019, 16:35:23 |
|
|
24.04.2019, 16:26:32
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
A skad sie bierze zmienna $agent? Nigdzie nie widze jej tworzenia
ps: pozatym w druim pliku zjadles ELSEIF i dales samo IF. Przejrzyj pierwszy plik gdzie masz ELSEIF i skopiuj dokladnie bo jak nic to tez jest problememem -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
24.04.2019, 16:29:21
Post
#3
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) |
Dzięki za zainteresowanie.
Tak jak pisałem system jest dość rozbudowany (i pewnie dlatego sobie nie radzę). Jest plik o nazwię DocumentData.php w którym m.in. jest:
a chwile niżej w tym samym pliku jest:
Tak myślałem na początku że nie przechodzi ta zmienna więc dla pewności dodałem na poczatku
w pliku getDocument.php dla tego pliku Ten post edytował pela222 24.04.2019, 16:33:10 |
|
|
24.04.2019, 16:32:15
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Sprawdz moj PS z poprzedniego posta bo tam narozrabiales
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
24.04.2019, 16:37:33
Post
#5
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) |
Ok. Widziałem to elseif. Chyba kiedyś kombinowałem i tak zostało. teraz poprawiłem i jest tak jak w pierwszym poście z elseif. Dalej nie działa.
Ten post edytował pela222 24.04.2019, 16:37:47 |
|
|
24.04.2019, 16:42:38
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Daj w takim razie przed blokiem IF
var_dump($agent); a po bloku IF var_dump($filePath); i pokaza jakie wartosci zwrocilo -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
24.04.2019, 16:56:15
Post
#7
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) |
null
string 'C:\wamp\www\apiRightone\document/XXX_Zbigniew_20190424_175408_other_en.docx' (length=76) |
|
|
24.04.2019, 17:02:58
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Czyli jak wdzisz $agent jest null wiec co ci nie wyszlo jego dodanie do drugiego pliku
ps: samo include_once 'DocumentData.php'; raczej nie wywola funkcji tam zawartych. Przesledz lepiej pierwszy plik jak on odpala to wszystko wczesniej -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
24.04.2019, 17:15:33
Post
#9
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) |
Tutaj cały plik pierwszy czyli documentGenerate.php
|
|
|
24.04.2019, 18:46:12
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
No i powtorz wszystko w pliku drugim co w pliku pierwszym ma zwiazek z $documentData
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
24.04.2019, 19:09:51
Post
#11
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) |
tak wygląda plik DocumentData.php
jak w pliku getDocument.php powtórzę ten zapis (czyli pobierz wszystkie zmienne)
to dostaje
Zakładam że powinienem odwołać się do funkcji cuptureAgent tylko jak to zrobić? ??wesoła twórczość Kod $documentData = new DocumentData; $agent = $documentData->getData($this->captureAgent()); ??koniec twórczości?? Ten post edytował pela222 24.04.2019, 19:39:14 |
|
|
25.04.2019, 08:54:10
Post
#12
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Zdaje sie dosc wyraznie napisalem ze masz powtorzyc caly kod z pliku pierwszego, ktory dotyczy zmiennej $documentData. Czego nie rozumiesz w tym zdaniu?
Odpal sobie w edytorze CTRL+F, wpisz $documentData i to ci znajdzie wszystkie jego wystapienia. Masz je powtorzyc w pliku drugim. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
25.04.2019, 09:44:47
Post
#13
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) |
Hej,
Już pisałem, że jak powtórzę wszystkie wpisy gdzie jest $documentData to dostaję błąd: {"status":"ERR","message":[{"body":"Lack of clients data","type":"danger"}]} Ten błąd wynika z części kodu jaki jest w pliku DocumentData.php, który już wkleiłem, żeby pokazać skąd się bierze:
Ponownie napisze, że wykonywanie tego tutaj jest zbędne bo to odpowiada za walidację parametrów takich jak: Czy istnieje klient, czy istnieje typ polisy, czy wybrano język). Innymi słowy zbędne tutaj. Ja z całego tego pliku potrzebuję uzyskać jedną zmienną jaką jest $agent. Tak naprawdę to ten błąd dostaję już jak powtórzę:
Poza tym nie ma sensu powtarzać części z nich bo dotyczą zupełnie innych kwestii i są kompletnie nie związane ze zmienną agent. Moje ograniczone myślenie prowadzi mnie do tego, żeby dodać nową funkcje publiczną w pliku DocumentData.php:
i wtedy w getDocument.php
No ale cały czas jak wrzucę poniżej: To po klinknięciu na link do ściągania pliku dostaję 'null' Jak zmienię mój wpis w DocumentData.php na:
to dostaję: array (size=7) 'agent' => null 'agentFull' => null 'agentPhone' => null 'broker' => null 'brokerAddress' => null 'brokerBackground' => null 'agentSignature' => null Jest to oczywiście związane z tym że tak naprawdę nie wywołuję mojej nowej funkcji publicznej getAgent na poziomie plików określających typ dokumentu jaki ma być wygenerowany. Wieć albo musiąłbym to dodać w tych plikach (ich stała cześć skaładowa wyglada tak:
Albo tak jak pisałem wyłuskać z tej istniejącej funkcji publicznej getData tylko zmienne dla funkcii prywatnej captureAgent. Niestety tego nie potrafię. Ten post edytował pela222 25.04.2019, 09:46:33 |
|
|
25.04.2019, 09:51:40
Post
#14
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
No dobra, moj blad, spojrzalem tylko na kod ktory wkleiles a tam mi brakowalo tego i owego.
Ok, teraz widze ze agen idzie poprostu z POSTa. A z tego co widze do pliku dobierasz sie linkiem wiec raz ze postem nic nie wysylasz a dwa ze i tak nie ma tam agenta. Jak nie zalezy ci na bezpieczenstwie, tudziez i tak twoja aplikacja za bardzo bezpieczna nie jest - patrzac w jaki sposob teraz leci agent to mozna odniesc takie wlasnie wrazenie - to dodaj tego agenta poprostu do linku i pobieraj go z GET i juz Jesli chcesz to zrobic choc odrobine ladniej, to trzymaja agenta w SESSION i przy pobieraniu pliku pobieraj go wlasnie stamtad -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
25.04.2019, 10:33:43
Post
#15
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) |
Hej,
dlaczego nie mogę dobrać się do tej zmiennej skoro ona jest dostępne np jak zrobię Na poziomie tej funkcji publicznej public function getData w pliku DocumentData.php
Na koniec czy dodać tą zmienną do SESSION powinienem na poziomie pliku documentGenerate.php (bo tam mam tą zmienną). |
|
|
25.04.2019, 10:43:31
Post
#16
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Ja nie wiem, ja widze, ze w DocumetnData agent idzie stad
$this->data['agent'] = $_POST['agent']; czyli z posta. Plik pobierasz na podstawie zwyklego linku z tego co widzialem tak? Czyli POSTa nie wysylasz a tym samym nie masz agent w POST. Czy moze sie myle i plik pobierasz inaczej? Cytat dlaczego nie mogę dobrać się do tej zmiennej skoro ona jest dostępne np jak zrobię Czyli w akcji pobierania pliku masz tego agent? No to nie rozumiem w czym problem -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
25.04.2019, 11:02:36
Post
#17
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) |
Ok. Puściłem zmienną agent w linku w pliku documentGenerate.php
w w pliku getDocument.php zczytałem
I działa. Dziękuję tobie za pomoc, cierpliwość i czas jaki poświęciłeś. |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 01:45 |