Loading...
a.polyanska avatar a.polyanska 107 Точки

[Exam Problems] PHP Basics - 29 August 2014 Morning- Problem{3} - Chat Logger

Ох, пак аз с въпросче, но така е преди изпит :)

Уж решавам задачата, при мен си принти коректно резултата, но когато пусна решението в джъджа на ВСИЧКИ тестове дава runtime error: 

PHP Warning:  strtotime(): It is not safe to rely on the system'...

В авторското решение също е използвана strtotime(), но решението си върви без проблем. Едва ли се дължи на шуробаджанащина, така че ще съм благодарна, ако някой ми подскаже на какво може да е :)

Ето кода: тук

Тагове:
0
PHP Web Development Basics 15/12/2014 18:13:06
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

1. Грешката в Google  ( https://www.google.bg/search?q=HP+Warning%3A++strtotime%28%29%3A+It+is+not+safe+to+rely+on+the+system%27 )

2. Клик върху първия резултат (Warning (2): strtotime() [function.strtotime]: It is not safe to ...)

3. Скрол до първия отговор:

<span class="com">/**
 * If you are on PHP 5.3 uncomment this line and correct your server timezone
 * to fix the date &amp; time related errors.
 */</span>
    <span class="com">//date_default_timezone_set('UTC');</span>

 

4. Добавяне на date_default_timezone_set('UTC'); в началото на кода

5. Тестовете започват да минават :)

3
a.polyanska avatar a.polyanska 107 Точки

Ти пробва ли дали минават тестовете? Защото сега ми изникна друг проблем- няма грешка при изпълнение, но във всички аутпути за тайм излиза

a few moments ago

В дебъгера и в моята конзола продължава да си смята коректно. ОХ как ги мразя тези дати!

 

Eто преправения код: http://pastebin.com/r42R9Fkp

0
RoYaL avatar RoYaL Trainer 6849 Точки

С твоя код ми минават 3те нулеви и един нормален тест (общо 10 точки). Имаш грешка в това как взимаш инпута за дата. Той се казва currentDate а не currentTime. Ако го смениш ще ти минат 1вите 4 теста. От там нататък е нещо в сметките :)

0
15/12/2014 17:13:19
a.polyanska avatar a.polyanska 107 Точки

С моя код ми минава само един тест- нулев 2.

Освен това, виж какво пише в условието:

The input will be read from an HTTP GET request. The current time will come from input text field 'currentTime'. The messages come from a textarea 'messages', holding each message on a separate line.

 

Направо си е currentTime :) Когато го смених на currentDate, минава, както каза ти, четири теста общо. Ти къде го видя това име? Кое не съм догледала? Как така, ако е грешено името минава, макар и само един тест?

 

 

0
velio84 avatar velio84 241 Точки

За да не отварям нова тема, ще пиша тук, защото решавам същата тема в момента.

На 3-та задача - ArticleParser, Judge ми дава:

 

runtime error

PHP Warning:  preg_match(): Compilation failed: invalid range in...

ето ми го кода

Някой да има идея dafaqs wrong? smile

Също ще се радвам, ако някой има по-добро предложение как да мачвам текста, след като съм сплитнал валидните articles - сега го правя на парче: мачвам топика, правя променлива, режа текста до %, мачвам автора, правя променлива, режа текста до ; .... и т.н.

0
17/12/2014 12:56:23
RoYaL avatar RoYaL Trainer 6849 Точки

Имаш два проблема.

Единият е като на авторката на темата, ще трябва и ти да сложиш дефолтна таймзона.

Конкретният проблем, който си копирал е малко труден за дебъгване, ако не си наясно с еволюцията на езика (аз също го дебъгвах по начина описан по-долу)

За да разбереш на кой ред точно ти е проблема (очевидно е в някой от редовете с preg_match()) слагай един "exit" след първия preg_match, ако не изгърми там с такава грешка, слагай го след втория и така докато не достигнеш грешката.

В такъв момент разбираш, че проблемът ти е на този ред:

preg_match("/[A-Za-z.-\s]+/", $trimmedText, $a);

Какво се прави като разбереш, че ти е в този ред проблемът? Ами това, което съм описал в по-горния отговор:

1. Гугъл на грешката: https://www.google.bg/search?q=Warning:%20%20preg_match%28%29:%20Compilation%20failed:%20invalid%20range%20in...

2. Отваряне на първия резултат preg_match(): Compilation failed · Issue #13 · infostreams ...

3. Зачитаме се: "I have read that PHP 5.5 requires the hyphen to be escaped or moved to the end of the list if you want it to match a literal hyphen. "

4. Ескейпваме тирето: preg_match("/[A-Za-z.\-\s]+/", $trimmedText, $a);

5. Добавяме в началото на скрипта: date_default_timezone_set('UTC'); 

6. Събмитваме и тестовете вече имат аутпут :)

 

P.S.: Конкретно проблемът означава, че тирето го е сметнало за рейндж. Всмисъл такъв имаш три рейнджа в тези квадратни скоби. От главно А до главно Z. От малко "a" до малко "z" и от точка "." до уайтспейс "\s" A-Z   a-z   .-\s Тъй като от точка до уайтспейс не е валиден рейндж, трябва да кажеш на РНР, че това не е рейндж а просто сет от чарове и за това тирето се ескейпва.

 

3
17/12/2014 14:17:43
velio84 avatar velio84 241 Точки

muchas gracias senor Royal :)

Довечера след работа ще тествам какво се случва

0
a.polyanska avatar a.polyanska 107 Точки

Понеже говорим за регекс, каква е разликата между двете:

$pattern = "/<td>\s*(.*?)\s*</td>\s*<td>\s*(.*?)\s*</td>\s*<td>\s*(.*?)\s*</td>\s*<td>\s*(.*?)\s*</td>/";
$pattern = "|<td>\s*(.*?)\s*</td>\s*<td>\s*(.*?)\s*</td>\s*<td>\s*(.*?)\s*</td>\s*<td>\s*(.*?)\s*</td>|";

Според гугъл- никаква. Но в случая, когато използвам "/" ми дава: Warning: preg_match_all(): Unknown modifier 't', а с "|" върви без проблем.

 

0
Petar_Belberov avatar Petar_Belberov 41 Точки

Не мога за пореден път да разбера защо не ми дава пълен брой точки, даже пробвах всички тестове и на конзолата ми илизат вярно, но judje-а не ми приема от 3-ти тест натам. Ако някой може да помогне ще е супер, жалко, че аз сам не мога да си помогна... :D

Ето линк: https://github.com/PetarBelberov/PHP-Exam-Preparation/blob/master/02.ChatLogger.php

1
21/12/2014 01:44:26
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.