Nie wy?wietla si? obrazek napisany w PHP po zmianie przestarzalej funkcji EREGI na now? PREG_MATCH
|
r3pilc3 |
Dodany dnia 22.07.2012 17:12:37
|

Przedszkolak

Postów: 7 Ostrzeżeń: 3
Data rejestracji: 22.07.2012 16:20
|
Witam :]
Mam stron? dzia?aj?c? na zasadzie frameworka. Wieke plików.php z elementami JavaScript.
W XAMPP 1.7.1 (PHP 5.2.8) utworzy?em baz? danych powprowadza?em dane. Wy?wietlam stron? localhost/nazwastrony i wszystko dzia?a ;]
Strona jest OK!
Pragn? t? stron? mie? w XAMPP 1.7.7, który posiada wersj? PHP 5.3.8.
W tym rzecz, ?e nowsza wersja PHP w XAMPP 1.7.7 napotyka b??dy gdy próbuje wy?wietli? stron? administratora.
Strona g?ówna nie zawiera b??dów. natomiast strona logowania administratora napotyka b??dy. Oto strona dla wzrokowców: (zwró?cie uwag?, ?e obrazek si? nie wy?wietla).

Z jednym b??dem, który si? wy?wietla? sobie poradzi?em.
Funkcja sesion_unregister(), która zgodnie z nowymi wymogami jest 'z?a' poprawi?em j? w sposób taki, ?e:
session_unregister($key);
zast?pi?em:
$_SESSION[$key]=$GLOBALS[$key];
i ju? si? nie wy?wietla ten b??d. Tak, wi?c zosta? mi jeszcze jeden b??d.
"Teraz moja pro?ba o pomoc".
Wy?wietla mi si? jeszcze 1 b??d (6x pisze to samo):
Deprecated: Function eregi() is deprecated in (?cie?kaPliku\admin.php) on line 242
Komunikat ten oznacza po prostu i? funkcja eregi z której wtedy korzysta?em zosta?a zdeprecjonowana i nale?y j? zast?pi? nowszym odpowiednikiem. My?l?, ?e tym odpowiednikiem jest preg_match().
Wi?c poka?? Wam cz??? kodu zwi?zan? z funkcj? eregi:
foreach($menus as $option){
if($option['activeon'])
foreach($option['activeon'] as $activeon){
if(eregi($action, $activeon)) {
$option['active']=true;
} }
Po zamianie funkcji eregi zgodnie z wymogami kod powinien wygl?da? nast?puj?co:
foreach($menus as $option){
if($option['activeon'])
foreach($option['activeon'] as $activeon){
if(preg_match("/".$action."/i", $activeon)) {
$option['active']=true;
} }[code]
lub te? zamiast[blad]:[/blad]
[code]if(preg_match("/".$action."/i", $activeon))
mo?na wpisa?:
if($action == $activeon)
tak i tak dzia?a strona logowania dzia?a bez wy?wietlania si? ?adnych b??dów na niej.
Problem w tym, ?e po zmianie EREGI na PREG_MATCH nie wy?wietla mi si? ju? w ogóle obrazek. A powinien si? wy?wietla? abym móg? przepisa? z niego losowo generuj?cy si? kod w celu poprawnego zalogowania na stronie.
Nie wiem co jest nie tak. Je?li kto? wpad? na jaki? pomys? to prosz? o pomoc.
Odpada opcja wpisania w plik index.php wy??czenia raportowania b??dów zamiast poprawi? eregi:
error_reporting ('E_ALL ^E_DEPRECATED ^E_NOTICE');
Poniewa? wtedy te? obrazek si? nie wy?wietla.
Co nie tak z funkcj? PREG_MATCH, która zast?pi?a przestarza?? funkcj? EREGI?
Powinno by? wszystko OK a tu w ogóle obrazek si? nie wy?wietla.
Prosz? o pomoc.
PW od moderatora:
- Przeniesienie tematu - Drecha 22.07.2012 18:00
Edytowane przez Pieka dnia 27.07.2012 12:42:52
|
|
|
|
W?cibski Go?? |
Dodany dnia 23.10.2025 23:22:31
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
IP: localhost |
|
|
bartek124 |
Dodany dnia 23.07.2012 08:21:09
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Ten preg_match powinien rozwi?za? spraw?. By? mo?e jeszcze skrypt generuj?cy obrazek zawiera jakie? b??dy. Otwórz go w nowym oknie i sprawd? czy wy?wietla co? niepo??danego.
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
r3pilc3 |
Dodany dnia 25.07.2012 18:47:12
|

Przedszkolak

Postów: 7 Ostrzeżeń: 3
Data rejestracji: 22.07.2012 16:20
|
bartek124 napisa?(a):
Ten preg_match powinien rozwi?za? spraw?. By? mo?e jeszcze skrypt generuj?cy obrazek zawiera jakie? b??dy. Otwórz go w nowym oknie i sprawd? czy wy?wietla co? niepo??danego.
Strona sk?ada si? z frameworka i nie dam rady tak komponowa?.
Jak w??cz? pe?ne raportowanie b??dów to nie wy?wietla mi si? ?aden b??d.
Jak ju? mówi?em w XAMPP 1.7.1 strona wy?wietla? mi si? prawid?owo.
Teraz mam XAMPP1.7.7 (PHP5.3.8)..
..i wy?wietla mi si? komunikat, ?e funkcja eregi jest przestarza?a. Wi?c zamieni?em j?:
if(eregi($action, $activeon))
na:
if(preg_match("/{$action}/i", $activeon))
Zamieni?em eregi na preg_match i powinno by? wszystko ok. Niestety w panelu logowania nie wy?wietla si? obrazek.
My?l?, ?e powinien skoro zrobi?em zamian? eregi na preg_match zgodnie z wymogami.

Co mo?e by? nie tak? Jakie? pomys?y?
Edytowane przez r3pilc3 dnia 26.07.2012 12:32:00
|
|
|
|
bartek124 |
Dodany dnia 26.07.2012 14:41:48
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
S?uchaj, to rozumiem, ale obrazek captchy te? jest generowany przez skrypt PHP i by? mo?e tam te? istnieje jaki? b??d który uniemo?liwia poprawne wygenerowanie.
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
r3pilc3 |
Dodany dnia 27.07.2012 11:00:33
|

Przedszkolak

Postów: 7 Ostrzeżeń: 3
Data rejestracji: 22.07.2012 16:20
|
Plik captcha.php:
<?php
$rn=$_GET['rn'];
$datekey = date("F j");
$rcode = hexdec(md5($_SERVER[HTTP_USER_AGENT].$rn . $datekey));
$code = substr($rcode, 2, 6);
$wysokosc=30;
$szerokosc=130;
$pic=imagecreatetruecolor($szerokosc,$wysokosc);
$bialy=ImageColorAllocate($pic,207,224,215);
$czarny=ImageColorAllocate($pic,0,0,0);
$szary=ImageColorAllocate($pic,150,150,150);
ImageFill($pic,1,1,$bialy);
for($i=0;$i<200;$i++)
{
$los1=rand(0,$szerokosc);
$los2=rand(0,$wysokosc);
ImageLine($pic,$los1,$los2,$los1,$los2,$szary);
}
for($i=0;$i<strlen($code);$i++)
{
$nr=$code[$i];
$czcionka = "opiated.ttf";
$rozmiar=rand(9,12); //wielko?c litery
$obrot=rand(-25,25); //pod jakim katem ma by? dana litera
imagettftext($pic,$rozmiar,$obrot,$i*20+7,rand(1,2)*4+14,$czarny,$czcionka,$nr);
}
// echo $a."sss";
Header("Content-type: image/gif");
header("Cache-Control:no-store,no-cache,must-revalidate");
ImageGIF($pic);
ImageDestroy($image);
?>
|
|
|
|
bartek124 |
Dodany dnia 27.07.2012 12:38:17
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Poprawiony:
<?php
$rn=$_GET['rn'];
date_default_timezone_set("Europe/Warsaw");
$datekey = date("F j");
$rcode = hexdec(md5($_SERVER['HTTP_USER_AGENT'].$rn . $datekey));
$code = substr($rcode, 2, 6);
$wysokosc=30;
$szerokosc=130;
$pic=imagecreatetruecolor($szerokosc,$wysokosc);
$bialy=ImageColorAllocate($pic,207,224,215);
$czarny=ImageColorAllocate($pic,0,0,0);
$szary=ImageColorAllocate($pic,150,150,150);
ImageFill($pic,1,1,$bialy);
for($i=0;$i<200;$i++)
{
$los1=rand(0,$szerokosc);
$los2=rand(0,$wysokosc);
ImageLine($pic,$los1,$los2,$los1,$los2,$szary);
}
for($i=0;$i<strlen($code);$i++)
{
$nr=$code[$i];
$czcionka = getcwd()."/opiated.ttf";
$rozmiar=rand(9,12); //wielko?c litery
$obrot=rand(-25,25); //pod jakim katem ma by? dana litera
imagettftext($pic,$rozmiar,$obrot,$i*20+7,rand(1,2)*4+14,$czarny,$czcionka,$nr);
}
Header("Content-type: image/gif");
header("Cache-Control:no-store,no-cache,must-revalidate");
ImageGIF($pic);
ImageDestroy($pic);
?>
Kliknij i zaczekaj na załadowanie kodu ...
Plik z czcionk? powinien by? w tym samym folderze co plik captcha.php.
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
r3pilc3 |
Dodany dnia 27.07.2012 23:20:44
|

Przedszkolak

Postów: 7 Ostrzeżeń: 3
Data rejestracji: 22.07.2012 16:20
|
Tak, znajduje si? w tej samej lokalizacji co plik captcha.php.
KOD pliku captcha.php
<?php
$rn=$_GET['rn'];
$datekey = date("F j");
$rcode = hexdec(md5($_SERVER['HTTP_USER_AGENT'].$rn . $datekey));
$code = substr($rcode, 2, 6);
$wysokosc=30;
$szerokosc=130;
$pic=imagecreatetruecolor($szerokosc,$wysokosc);
$bialy=ImageColorAllocate($pic,207,224,215);
$czarny=ImageColorAllocate($pic,0,0,0);
$szary=ImageColorAllocate($pic,150,150,150);
ImageFill($pic,1,1,$bialy);
for($i=0;$i<200;$i++)
{
$los1=rand(0,$szerokosc);
$los2=rand(0,$wysokosc);
ImageLine($pic,$los1,$los2,$los1,$los2,$szary);
}
for($i=0;$i<strlen($code);$i++)
{
$nr=$code[$i];
$czcionka = "opiated.ttf";
$rozmiar=rand(9,12);
$obrot=rand(-25,25);
imagettftext($pic,$rozmiar,$obrot,$i*20+7,rand(1,2)*4+14,$czarny,$czcionka,$nr);
}
// echo $a."sss";
Header("Content-type: image/gif");
header("Cache-Control:no-store,no-cache,must-revalidate");
ImageGIF($pic);
ImageDestroy($image);
?>
?>
Wystarczy?o zamieni? w nim:
[HTTP_USER_AGENT]
Na:
['HTTP_USER_AGENT']
Oraz otworzy? plik w Notepad++ i zapisa? kodowanie w ANSI (a mia?em w UTF-8).
Problem rozwi?zany:
http://i47.tinypi...3kyptu.png
Dzi?kuj? Bartkowi124 za najwi?ksze zaanga?owanie i prób? pomocy.
Jednak tematu nie zamykam. Poniewa? mam kolejny problem.
Id? krok wy?ej i z poprawy b??dów wyst?puj?cych w XAMPP 1.7.7 postanowi?em przej?? do najnowszego XAMPP 1.8.0.
Oraz dodatkow w??czy?em w index.php pe?ne raportowanie b??dów!
Tak wi?c, w XAMPP 1.8.0, który zawiera php w wersji 5.4.4 mój projekt sklepu internetowego napotyka nast?puj?ce b??dy:
1) strona g?ówna mojej strony zawiera 2 Warningi i b??dy, które si? nie wy?wietlaj? bez pe?nego raportowania b??dów:
http://i45.tinypi...upa7ty.png
2) posiadam w projekcie tylko stron? g?ówn? oraz stron? logowania w której wyst?puj? nast?puj?ce b??dy:
http://i47.tinypi...oh0nit.png
Prosz? bardzo o pomoc w rozwi?zaniu tych b??dów.
Narazie zajmn? si? 2 Warningami, które dosz?y wraz z nowa wersj? PHP 5.4.4
W pliku controller_base.php wy?wietla si? b??d w linii: 13 i 17, tylko 'to' trzeba poprawi?.
Oto plik controller_base.php:
<?php
Abstract Class Controller_Base {
protected $registry;
function __construct($registry, $models, $addons, $layout, $controller) {
$this->registry = $registry;
$this->session = $registry->session;
$this->error = $registry->error;
$this->text = $registry->text;
$this->router = $registry->router;
$this->template = $registry->template;
$this->db = $registry->db;
foreach($models as $model){
$this->model->$model = $registry->model->$model;
}
if($addons)
foreach($addons as $addon){
$this->addon->$addon = $registry->addon->$addon;
}
$this->template->layout = $layout;
$this->here = $controller;
}
abstract function index($args=null,$post=null);
function addon($addon){
return 'http://'.server_addr.site_addr.'core/addons/'.$addon;
}
}
?>
W pliku router.php warningi s? w linii: 118 i 131 oraz b??dy w linii: 88, 107 i 135.
plik: router.php:
(Napisa?em w komentarzu gzie b??dy ?eby?cie nie musieli liczy?: //linia 88 itd..)
<?php
Class Router {
private $registry;
private $path;
private $args = array();
function __construct($registry) {
$this->registry = $registry;
}
function setPath($path) {
$path .= DIRSEP;
if (is_dir($path) == false) {
throw new Exception ('Invalid controller path: `' . $path . '`');
}
$this->path = $path;
}
private function getController(&$file, &$controller, &$action, &$args) {
$route = (empty($_GET['route'])) ? '' : $_GET['route'];
if (empty($route)) { $route = 'home'; }
// Get separate parts
$route = trim($route, '/\\');
$parts = explode('/', $route);
// Find right controller
$cmd_path = $this->path;
foreach ($parts as $part) {
$fullpath = $cmd_path . $part;
// Is there a dir with this path?
if (is_dir($fullpath)) {
$cmd_path .= $part . DIRSEP;
array_shift($parts);
continue;
}
// Find the file
if (is_file($fullpath . iext)) {
$controller = $part;
array_shift($parts);
break;
}
}
if (empty($controller)) { $controller = 'home'; };
// Get action
$action = array_shift($parts);
if (empty($action)) { $action = 'index'; }
$file = $cmd_path . $controller . iext;
$args = $parts;
}
function delegate() {
// Analyze route
$this->getController($file, $controller, $action, $args);
// File available?
$controller_name=$controller;
if (is_readable($file) == false) {
die ('404 - Controller File Not Found');
}
// Include the file
include ($file);
// Initiate the class
$class = 'Controller_' . $controller;
/// LANGUAGE
if($controller=="admin")
$name='pl';
else
$name=$_SESSION['language'];
end;
if($name=="") $name="eng";
$mfile=site_path . 'views' . DIRSEP . 'texts' . DIRSEP . $name . iext;
if (is_readable($mfile) == false) {
die ('404 - Texts File Not Found: '.$mfile);
}
include($mfile);
$text_name='Text_'.$name;
$text = new $text_name($this->registry);
$this->registry->text = $text;
////////////
if($addons)
foreach($addons as $addon){
$mfile=core_path . 'addons' . DIRSEP .$addon . iext;
if (is_readable($mfile) == false) {
die ('404 - Addon File Not Found');
}
include($mfile);
$addon_name='Addon_' . $addon;
$addon2 = new $addon_name($this->registry);
$this->registry->addon->$addon = $addon2;
}
foreach($models as $name){
$mfile=site_path . 'models' . DIRSEP . $name . iext;
if (is_readable($mfile) == false) {
die ('404 - Model File Not Found');
}
include($mfile);
$model_name='Model_' . $name;
$model = new $model_name($this->registry);
$this->registry->model->$name = $model;
}
$controller = new $class($this->registry, $models, $addons, $layout, $controller);
// Action available?
if (is_callable(array($controller, $action)) == false) {
$this->redirect('home/deadend/'.$controller_name.'/'.$action);
die ('404 - Controller Action Not Found');
}
// Run action
if(is_callable(array($controller, 'BeforeFilter')) == true)
$controller->BeforeFilter($action,$controller_name,$args,$_POST);
$controller->$action($args,$_POST);
}
function redirect($route){
header("Location: ".site_addr.$route);
}
}
?>
1 b??d 'Notice' rozwi?za?em. Powied?cie jak wiecie czy ?le zrobi?em ale jestem pewien, ?e dobrze, skoro jest komunikat:
Notice: Use of undefined constant end - assumed 'end' in C:\xampp\htdocs\Sklep_jubilerski\core\classes\router.php on line 88
To nale?y w linii 88 co si? znajduje: end; poprawi? na: 'end';
Zapisa?em zmiany i ju? ten b??d si? nie wy?wietla na stronie g?ównej i na stronie logowania.
Prosz? o pomoc.
Wiem co znacz? niektóre z tych komunikatów ale nie wiem co trzeba w takim wypadku podj?? za kroki... aby poprawi? stron? ?eby dzia?a?a.
Edytowane przez r3pilc3 dnia 30.07.2012 21:55:01
|
|
|