Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Raz tak raz nie.
Goric
post 18.04.2008, 17:28:08
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2007

Ostrzeżenie: (0%)
-----


Mam wyjątkowo dziwny problem. Na moim komputerze (notebook FJ AMILO) mam zainstalowanego XAMPP'a (najnowsza wersja, system operacyjny Windows). Napisałem skrypt, po czym zaraz go uruchomiłem. Okazało się, że skrypt wykonuje jedne polecenia, innych nie, albo np. definiuję stałą REF, dołączam plik, w którym jest instrukacja if sprwadzająca czy została zdefiniowana stała REV. Jeśli takowa nie została zainicjowana, to powinien się wyświetlić odpowiedni komunikat. Jednakże nic takiego się nie pokazuje. Jestem sfrustrowanay, błagam na kolanach o pomoc.

PS. A jeszcze dziwniejsze jest to, że jak uruchamiam np. forum phpBB3, to wszystko działa poprawnie. sciana.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
Piniek
post 18.04.2008, 17:32:32
Post #2





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Może pokazesz kod ? naprawdę my nie czytamy w umysłach ;]


--------------------
Go to the top of the page
+Quote Post
mike
post 18.04.2008, 17:33:22
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Masz brak średnika w linii 54.

Głupia odpowiedź, nie?
No cóż. Dostosowałem się do pytania.





Może pokażesz kod, czy mamy się domyślać co napisałeś?
Go to the top of the page
+Quote Post
Goric
post 18.04.2008, 19:25:32
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2007

Ostrzeżenie: (0%)
-----


Chodzi mi o to, żeskrypt jest DOBRZE napisany. Ale skoro tak, to szukajcie błędów:

Plik index.php
  1. <?php
  2. define("REF", 1);
  3.  
  4. require_once "geoip.php";
  5. require_once "core.php";
  6. ?>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  8. <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="pl-pl" xml:lang="pl-pl">
  9. <head>
  10.  
  11. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
  12. <meta http-equiv="content-language" content="pl-pl" />
  13. <meta http-equiv="content-style-type" content="text/css" />
  14. <meta http-equiv="imagetoolbar" content="no" />
  15. <meta name="resource-type" content="document" />
  16. <meta name="distribution" content="global" />
  17. <meta name="copyright" content="" />
  18. <meta name="keywords" content="" />
  19. <meta name="description" content="" />
  20. <title>Revolution Game Studios &bull; Strona główna</title>
  21.  
  22. <link rel="stylesheet" href="forum/styles/codeblack/theme/stylesheet.css" type="text/css" />
  23.  
  24. <script type="text/javascript">
  25. // <![CDATA[
  26.  
  27. function popup(url, width, height, name)
  28. {
  29. if (!name)
  30. {
  31. name = '_popup';
  32. }
  33.  
  34. window.open(url.replace(/&amp;/g, '&'), name, 'height=' + height + ',resizable=yes,scrollbars=yes,width=' + width);
  35. return false;
  36. }
  37.  
  38. function jumpto()
  39. {
  40. var page = prompt('Wprowadź numer strony, do której chcesz przejść.:', '');
  41. var perpage = '';
  42. var base_url = '';
  43.  
  44. if (page !== null && !isNaN(page) && page > 0)
  45. {
  46. document.location.href = base_url.replace(/&amp;/g, '&') + '&start=' + ((page - 1) * perpage);
  47. }
  48. }
  49.  
  50. /**
  51. * Find a member
  52. */
  53. function find_username(url)
  54. {
  55. popup(url, 760, 570, '_usersearch');
  56. return false;
  57. }
  58.  
  59. /**
  60. * Mark/unmark checklist
  61. * id = ID of parent container, name = name prefix, state = state [true/false]
  62. */
  63. function marklist(id, name, state)
  64. {
  65. var parent = document.getElementById(id);
  66. if (!parent)
  67. {
  68. eval('parent = document.' + id);
  69. }
  70.  
  71. if (!parent)
  72. {
  73. return;
  74. }
  75.  
  76. var rb = parent.getElementsByTagName('input');
  77.  
  78. for (var r = 0; r < rb.length; r++)
  79. {
  80. if (rb[r].name.substr(0, name.length) == name)
  81. {
  82. rb[r].checked = state;
  83. }
  84. }
  85. }
  86.  
  87.  
  88. // ]]>
  89. </script>
  90. </head>
  91. <body class="ltr">
  92.  
  93. <a name="top"></a>
  94.  
  95. <div id="wrapheader">
  96.  
  97. <div id="logodesc">
  98. <table width="100%" cellspacing="0">
  99. <tr>
  100. <td><a href="./index.php"><img src="forum/styles/codeblack/imageset/logo.jpg" width="800" height="120" alt="" title="" /></a></td>
  101. </tr>
  102. </table>
  103. </div>
  104.  
  105. <div id="menubar">
  106. <table class="tablebg" width="100%" cellspacing="1">
  107. <tr>
  108. <td align="center" valign="middle" class="cat">
  109. <a href="#"><img src="img/pl.png" /></a>&nbsp;&nbsp;<a href="#"><img src="img/en.png" /></a>
  110. </td>
  111. </tr>
  112. </table>
  113. </div>
  114.  
  115. </div>
  116.  
  117. <div id="wrapcentre" align="center">
  118. <br />
  119. <!-- Games Section -->
  120. <img src="<?php echo header_img("g"); ?>" />
  121. <br />
  122. <!-- Forums Section -->
  123. <br />
  124. <img src="<?php echo header_img("f"); ?>" />
  125. <br />
  126. <!-- Contact Section -->
  127. <br />
  128. <img src="<?php echo header_img("c"); ?>" />
  129. <br />
  130. </div>
  131.  
  132. <br />
  133.  
  134. <div id="menubar">
  135. <table class="tablebg" width="100%" cellspacing="1">
  136. <tr>
  137. <td align="center" valign="middle" class="cat">
  138. &copy; 2008 Revolution Game Studios
  139. </td>
  140. </tr>
  141. </table>
  142. </div>
  143.  
  144. <div id="wrapfooter">
  145. <span class="gensmall"></span><br /><span class="copyright">
  146. Design &copy; 2008 <a href="http://www.phpbbstylists.com" target="_blank">phpbbstylists.com</a>
  147. </span>
  148. </div>
  149.  
  150. </body>
  151. </html>


Pliku geoip.php nie zamieszczam bo za długi post by był, ale jest ze strony www.maxmind.com.

Plik core.php
  1. <?php
  2.  
  3. if (!defined(REV)) { die("Fucking Killfile."); }
  4.  
  5.  
  6. if (isset($_COOKIE['revgs_country'])) {
  7. $lang == $_COOKIE['revgs_country'];
  8. } else {
  9. $gi = geoip_open($_SERVER["DOCUMENT_ROOT"]."/rev_gs/GeoIP.dat", GEOIP_STANDARD);
  10. $vis_lang = geoip_country_code_by_addr($gi, $_SERVER["REMOTE_ADDR"]);
  11. echo $vis_lang;
  12.  
  13. if ($vis_lang == "PL") {
  14. setcookie("revgs_country", "pl", 120 * 24 * 60 * 60);
  15. $lang = "pl";
  16. } else {
  17. setcookie("revgs_country", "en", 120 * 24 * 60 * 60);
  18. $lang = "en";
  19. }
  20. }
  21. echo $lang;
  22.  
  23.  
  24. if (isset($_GET['i'])) {
  25. $bg = imagecreatefrompng("img/btn_bg.png");
  26. $image = imagecreatefrompng("img/btns/".$_GET['i']);
  27. $text = DBArray("SELECT name FROM ".$dbprefix."options WHERE id=1");
  28. imagecopy($bg, $image, 380, 125, 0, 0, 380, 125);
  29. header("Content-type: image/png");
  30. imagepng($image);
  31. die();
  32. }
  33.  
  34. function header_img($img) {
  35. return "img/".$lang."/".$img.".png";
  36. }
  37. ?>


To wszystko, mówiłem że wszystko okej, ale skoro tak... Proszę, nie wyżywajcie się na mnie, miałem zły dzień. Bardzo zły dzień...
Go to the top of the page
+Quote Post
mike
post 18.04.2008, 19:35:40
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(Goric @ 18.04.2008, 20:25:32 ) *
Chodzi mi o to, żeskrypt jest DOBRZE napisany.
Powiem Ci coś co może Cię zaskoczyć. Dobrze napisane skrypty działają zawsze tak samo. Mało tego one działają.
  1. <?php
  2.  
  3. // ...
  4. define("REF", 1);
  5.  
  6. // ...
  7.  
  8. if (!defined(REV)) // ...
  9.  
  10. ?>
Widzisz to co ja widzę? winksmiley.jpg
Go to the top of the page
+Quote Post
Goric
post 18.04.2008, 19:36:56
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2007

Ostrzeżenie: (0%)
-----


No właśnie, o to chodzi. Parser NIE zwraca na to żadnej uwagi...
Go to the top of the page
+Quote Post
dr_bonzo
post 18.04.2008, 19:37:23
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


to jest masakra, definiujesz REF a sprawdzasz REV, i to 2 razy robisz ten sam blad, w kodzie i w pierwszym poscie.


edit: @mike, no i wlasnie dziala dobrze, czyli tak jak jest napisany, REV niezdefiniowane czyli die(); tongue.gif

Ten post edytował dr_bonzo 18.04.2008, 19:38:37


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Goric
post 18.04.2008, 19:38:54
Post #8





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2007

Ostrzeżenie: (0%)
-----


Cytat(dr_bonzo @ 18.04.2008, 20:37:23 ) *
to jest masakra, definiujesz REF a sprawdzasz REV, i to 2 razy robisz ten sam blad, w kodzie i w pierwszym poscie.

Błąd zostałzrobiony specjalnie, parser NIE zwraca na to uwagi ŻADNEJ. O to właśnie mi chodzi.
Go to the top of the page
+Quote Post
Piniek
post 18.04.2008, 19:41:54
Post #9





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


a dlaczego ma zwracać questionmark.gif przecież sprawdzasz czy została zdefiniowana jak nie to po prostu ten if nie zostaje wykonany.
chyba ze nie rozumiem co funkcja defined() robi ;p

Ten post edytował Piniek 18.04.2008, 19:44:30


--------------------
Go to the top of the page
+Quote Post
ARJ
post 18.04.2008, 19:42:35
Post #10





Grupa: Zarejestrowani
Postów: 453
Pomógł: 22
Dołączył: 20.09.2004
Skąd: Kraków - NH -

Ostrzeżenie: (0%)
-----


a czemu?
  1. <?php
  2. if (!defined(REV)) { die("Fucking Killfile."); } // ŹLE
  3. if (!defined('REF')) { die("Fucking Killfile."); }
  4. ?>


--------------------
Warsztat: Windows 7 Pro 64bit | Apache 2.2 | PHP 5.2 | MySQL 5.0 | PHPmyadmin 2.6.4
Go to the top of the page
+Quote Post
Goric
post 18.04.2008, 19:44:36
Post #11





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2007

Ostrzeżenie: (0%)
-----


No i pomyśl mój kolego, że NIC się nie zmieniło.
@Piniek: Ma kończyć skrypt jeżeli REV nie zostało ustawione. Mówię wam, że jest to jakiś błąd PARSERA, który NIC z tym nie robi... Aha, a wiesz co oznacza ! na początku?

Ten post edytował Goric 18.04.2008, 19:47:48
Go to the top of the page
+Quote Post
mike
post 18.04.2008, 19:48:37
Post #12





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


No zaraz nie coś trafi.
Elementarna niewiedza!

W zacytowanym kodzie nie chodziło mi o różnicę nazw. Chodziło mi o użycie funkcji define(), które jest niepoprawne.

Parser działa dobrze, tylko Ty tego nie rozumiesz. Wytłumaczę (tobie ~dr_bonzo też tongue.gif)

Aby skorzystać z funkcji define() należy przekazać jej jako string nazwę stałej. Robisz to? Nie.
Ty przekazujesz stałą. Co jest błędem.
Co dzieje się później? PHP nie ma stałej, którą przekazałeś więc automatycznie ją tworzy. Nadaje jej wartość taką samą jak jej nazwa. Rezultatem tego kod:
  1. <?php
  2.  
  3. if (!defined(REV))
  4.  
  5. ?>
tworzy stałą REV i nadaje jej wartość "REV" a później sprawdza czy jest ona zdefiniowana. Jest? Jest, bo właśnie ja utworzyliśmy.

Zacznij pisać jak człowiek z włączonym wyświetlaniem błędów a skończą się takie błędy.

Żeby nie było wątpliwości. Powinno być tak:
  1. <?php
  2.  
  3. if (!defined('REV'))
  4.  
  5. ?>


Totalny brak podstaw i jeszcze winą obarczasz parser. Poczytaj sobie początki dokumentacji to pogadamy.
Go to the top of the page
+Quote Post
Goric
post 18.04.2008, 19:48:54
Post #13





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2007

Ostrzeżenie: (0%)
-----


Cytat(mike @ 18.04.2008, 20:47:48 ) *
No zaraz nie coś trafi.
Elementarna niewiedza!

W zacytowanym kodzie nie chodziło mi o różnicę nazw. Chodziło mi o użycie funkcji define(), które jest niepoprawne.

Parser działa dobrze, tylko Ty tego nie rozumiesz. Wytłumaczę (tobie ~dr_bonzo też tongue.gif)

Aby skorzystać z funkcji define() należy przekazać jej jako string nazwę stałej. Robisz to? Nie.
Ty przekazujesz stałą. Co jest błędem.
Co dzieje się później? PHP nie ma stałej, którą przekazałeś więc automatycznie ją tworzy. Nadaje jej wartość taką samą jak jej nazwa. Rezultatem tego kod:
  1. <?php
  2.  
  3. if (!defined(REV))
  4.  
  5. ?>
tworzy stałą REV i nadaje jej wartość "REV" a później sprawdza czy jest ona zdefiniowana. Jest? Jest, bo właśnie ja utworzyliśmy.

Zacznij pisać jak człowiek z włączonym wyświetlaniem błędów a skończą się takie błędy.

Żeby nie było wątpliwości. Powinno być tak:
  1. <?php
  2.  
  3. if (!defined('REV'))
  4.  
  5. ?>


I mówiłem że to TEŻ nie działa, do cholery.
Go to the top of the page
+Quote Post
mike
post 18.04.2008, 20:04:10
Post #14





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


W poprzednim poście popełniłem błąd. Prawdopodobnie wynikający z pomieszania REF z REV. Zamotane nazwy. Zróżnicuj je bardziej to będzie Ci łatwiej.
Nie zmienia to faktu, że kod jest poprawny i parser działa dobrze.

A oto przykłady i wyniki:
  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5. define('REF', 1);
  6.  
  7. if (!defined(REV)) {
  8. echo 'brak stałej';
  9. } else {
  10. echo 'jest stała';
  11. }
  12.  
  13. ?>
Cytat
Notice: Use of undefined constant REV - assumed 'REV' in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\index.php on line 8
brak stałej


  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5. define('REF', 1);
  6.  
  7. if (!defined('REV')) {
  8. echo 'brak stałej';
  9. } else {
  10. echo 'jest stała';
  11. }
  12.  
  13. ?>
Cytat
brak stałej


  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5. define('REF', 1);
  6.  
  7. if (!defined(REF)) {
  8. echo 'brak stałej';
  9. } else {
  10. echo 'jest stała';
  11. }
  12.  
  13. ?>
Cytat
brak stałej


  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5. define('REF', 1);
  6.  
  7. if (!defined('REF')) {
  8. echo 'brak stałej';
  9. } else {
  10. echo 'jest stała';
  11. }
  12.  
  13. ?>
Cytat
jest stała
Go to the top of the page
+Quote Post
nospor
post 18.04.2008, 20:04:12
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nalezy sprawdzic co gdzie jest i jaką ma wartosc:
  1. <?php
  2. echo 'Stała REV:'.REV;
  3. if (defined(REV)) echo ' REV zdefiniowana';
  4. if (!defined(REV)) { die("Fucking Killfile."); } 
  5. echo '<br />Stała REF:'.REF;
  6. if (defined('REF')) echo ' REF zdefiniowana';
  7. if (!defined('REF')) { die("Fucking Killfile."); }
  8. echo '<br />i po stalych';
  9. ?>

Co wyswietla?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:47