These are chat archives for mosbth/oophp

30th
Mar 2017
Magnus Andersson
@bredsjomagnus
Mar 30 2017 06:23

Jag har kört en dbwebb publishpure men kan inte se vad som gör att jag inte får använda header('Location...') på student servern. Det ända felmeddelande som dyker upp är Warning: Cannot modify header information - headers already sent by (output started at /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/index-get.php:15) in /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/index-get.php on line 68 och det säger tyvärr inte så mycket. Det ena är starten på php-tag det andra är när jag försöker köra header.

Fler som har detta problem? Någon som har någon idé hur man kan fixa det?

Mikael Roos
@mosbth
Mar 30 2017 06:58
länka?

Ger felet:

Notice: Undefined variable: new_number_guesses_done in /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/index-get.php on line 40>
Notice: Undefined variable: secure in /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/index-get.php on line 41

Magnus Andersson
@bredsjomagnus
Mar 30 2017 07:00
Ok. Jag fick inte det meddelandet. Tack. Skall kolla detta.
Mikael Roos
@mosbth
Mar 30 2017 07:00
Du behöver nåt som löser första gången man accessar sidan, det funkar efter första gissningen
Magnus Andersson
@bredsjomagnus
Mar 30 2017 07:03
Det funkar när man går från index.php till index-get.php
Den delen.
Magnus Andersson
@bredsjomagnus
Mar 30 2017 07:13
Nu tror jag den biten är löst. Men att reset-problemet är kvar.
Magnus Andersson
@bredsjomagnus
Mar 30 2017 07:57

Mina headers already sent problem escalerar.... nu när jag går in på start_session får jag upp detta:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/index-session.php:10) in /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/Session.php on line 2

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/index-session.php:10) in /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/Session.php on line 2

Det funkar lokalt och på annan server jag testar mot.

Vet att det inte skall användas. Men alla problem, både med header(location...) och start_session försvinner med den magiska raden ob_start().

Allinrep
@pejg12
Mar 30 2017 08:15
Felmeddelandet pekar på index-session.php:10, alltså rad 10. Vad finns på den raden?
Magnus Andersson
@bredsjomagnus
Mar 30 2017 08:16
<meta charset="utf-8">
Allinrep
@pejg12
Mar 30 2017 08:17
Där har du problemet, så fort du skriver ut HTML så skapas headers. Efter det får man inte skicka session-information. Session-saker måste alltid hända innan all HTML skrivs ut.
Magnus Andersson
@bredsjomagnus
Mar 30 2017 08:18
ahhh... tack! Lesson learned.
Allinrep
@pejg12
Mar 30 2017 08:19
Ännu mer klurigt är att ett enda litet mellanrum kan vara problemet. Om man t.ex. har ett mellanslag eller radbrytning ovanför <?php i början av filen så kan det lilla mellanrummet orsaka att headers skapas och skickas.
Magnus Andersson
@bredsjomagnus
Mar 30 2017 08:20
Skall testa och se hur det blir. Hur det än blir så har detta skapat headervärk.
Allinrep
@pejg12
Mar 30 2017 08:20
;)
Magnus Andersson
@bredsjomagnus
Mar 30 2017 08:28
Får fortfarande felmeddelande. Nu pekar den på autoloader rad 2. Där finns /**.
Allinrep
@pejg12
Mar 30 2017 08:29
Är det den raden som "output started"?
Magnus Andersson
@bredsjomagnus
Mar 30 2017 08:29
Ja.
Allinrep
@pejg12
Mar 30 2017 08:31
Skumt. Kan jag få se både felmeddelandet och raderna det pekar på? Helst lite sammanhang också, några rader ovanför det som pekas på.
Magnus Andersson
@bredsjomagnus
Mar 30 2017 08:35

Absolut...

Felmeddelande:

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/autoload.php:2) in /home/saxon/students/20161/maaa16/www/dbwebb-kurser/oophp/me/kmom01/guess/Session.php on line 2

autoload.php tagen ur övningsartikeln:

<?php
/**
 * Autoloader for classes.
 *
 * @param string $class the name of the class.
 */
spl_autoload_register(function ($class) {
    $path = "{$class}.php";
    if (is_file($path)) {
        echo "Autoloading: $class<br>";
        include($path);
    }
});

Början på Session.php (kring rad 2):

<?php

class Session
{
Allinrep
@pejg12
Mar 30 2017 08:38
Hm, det verkar ju onekligen ha att göra med dolda tecken. Slå på "show hidden" eller liknande i Atom och se vad som finns där. Kontrollera med dbwebb validate så att alla filer har rätt encoding och radbrytningar osv.
En annan tanke är att det kan finnas en ?> i en annan fil, med mellanslag eller radbrytning efter. Men då tror jag felmeddelandet hade pekat där istället, så det borde inte vara det.
Mikael Roos
@mosbth
Mar 30 2017 08:46
rad 2 säger mig att du behöver göra dbwebb publispure, koden är minifierad nu.
dbwebb publishpure
Magnus Andersson
@bredsjomagnus
Mar 30 2017 08:52

Ja! Nu så äntligen kanske det eventuellt löst sig. Körde publishpure och denna gång pekade det på rad 17 i autoload.php. Det var helt enkelt min testutskrift av vilka klasser som laddades som ställde till det. Det där med att om det skapas html så skapas header. När jag tog bort den så kom inte det felmeddelandet tillbaka iallafall. Stort tack båda för hjälpen.

Men en fråga och fundering. Vad gör att det funkar bra på vissa ställen men inte andra. Har ju som sagt inte haft problem på annan server jag kört mot?

Mikael Roos
@mosbth
Mar 30 2017 09:04
Vissa servrar är konfigurerade att cache allt som skrivs ut och printa ut det i slutet, det är som att omringa allt man gör med en ob_start(); och avsluta med ob_get_flush(); Man kan även sätta på output_buffering i php.ini.
; output_buffering           
;   Default Value: Off       
;   Development Value: 4096  
;   Production Value: 4096
Troligen är det On i din PHP configuration.
Magnus Andersson
@bredsjomagnus
Mar 30 2017 09:06
Ok. Tack.
Mikael Roos
@mosbth
Mar 30 2017 09:07
Det är enklare att koda med det på, men om man stänger av det så tvingas man att ha full/bättre koll på hur man kodar. Så bäst är att stänga av det, koden blir mer "korrekt". Man vet aldrig vilken inställning som finns på en server som man inte kontrollerar.
Magnus Andersson
@bredsjomagnus
Mar 30 2017 09:12

Ja. Låter klokt. Skall in och kolla vad det står i php.ini.

Det är första gången jag hyr en server (eller vps snarare). Det finns hur mycket som helst att lära känns det som.

Allinrep
@pejg12
Mar 30 2017 09:55
Det finns det nog, ja :) Det räcker att lära sig lite grann för att det ska "fungera", men sen finns det saker att lära sig i flera år framöver. Och allt utvecklas hela tiden så det finns alltid nånting nytt.
Magnus Andersson
@bredsjomagnus
Mar 30 2017 17:04
Ursäkta om detta tagits upp förut. Men jag kan inte hitta någon error_reporting.php i exempelmappen. Men räcker det att man kopierar kodsnutten som är med i artikeln och skapar en error_reporting.php på så vis? Eller skall det vara mer kod än så?
Mikael Roos
@mosbth
Mar 30 2017 17:44
det räcker så, men dbwebb update borde få ned denna filen: https://github.com/dbwebb-se/oophp/blob/master/example/anax-lite/config/error_reporting.php
Magnus Andersson
@bredsjomagnus
Mar 30 2017 17:44
:+1:
Mikael Roos
@mosbth
Mar 30 2017 20:50
@litemerafrukt mergar och kikar på det
Anders Nygren
@litemerafrukt
Mar 30 2017 20:52
finfint :smile: Kommer det upp på packagist då också så jag kan göra composer install och få det att fungera i min miljö?
Mikael Roos
@mosbth
Mar 30 2017 20:52
yep, när jag taggat.
Anders Nygren
@litemerafrukt
Mar 30 2017 20:52
+1
Mikael Roos
@mosbth
Mar 30 2017 20:52
---> Mess detector for PHP. 
.bin/phpmd . text .phpmd.xml | tee build/phpmd
/home/mos/git/canax/request/src/Request/Request.php:218 The variable $server_name is not named in camelCase.
/home/mos/git/canax/request/src/Request/Request.php:218 The variable $server_name is not named in camelCase.
Anders Nygren
@litemerafrukt
Mar 30 2017 20:52
:+1:
hmm, vet inte varför inte jag fick upp det felet. Men en lokal variabel ingår inte i psr-2 vad jag förstår
Mikael Roos
@mosbth
Mar 30 2017 20:54
Jag fixar det. Kikar även på konstruktionen:
        $server = ! empty($server_name = $this->getServer('SERVER_NAME'))
            ? $server_name
            : $this->getServer('HTTP_HOST');
Anders Nygren
@litemerafrukt
Mar 30 2017 20:54
Vad är det med den?
Mikael Roos
@mosbth
Mar 30 2017 20:55
primärt tar vi SERVER_NAME, och finns inte det så vill vi ha HTTP_HOST. kikar på din tilldelning i empty-testet och funderar på ett enklare sätt att skriva konstruktionen
Anders Nygren
@litemerafrukt
Mar 30 2017 20:57
tja, jag skrev det som ett anrop till $this->getServer(‘SERVER_NAME’)två gånger från början men tyckte detta var nog så lättläst.
sen kan man ju alltid göra en tilldelning innan terneryn men då tycker jag att man separerar koden på ett sätt som gör att det blir läsningsinterpretering
det är väl en vanesak hur man man läser kod.
Mikael Roos
@mosbth
Mar 30 2017 21:01
då ska vi se om jag kan finna en snyggare lösning ;)
en uppfriskande kvällskativitet...
Anders Nygren
@litemerafrukt
Mar 30 2017 21:02
:smile:
Mikael Roos
@mosbth
Mar 30 2017 21:02
du vet hur en coalesque operator/funktion fungerar? Returnerar det första värdet som inte är null.
Anders Nygren
@litemerafrukt
Mar 30 2017 21:03
Jupp, men den finns inte i php 5.6
Mikael Roos
@mosbth
Mar 30 2017 21:03
ser ut att finnas en variant: http://stackoverflow.com/a/1891899/341137
första kommentaren
om det funkar så TIL:
        $server = $this->getServer('SERVER_NAME')
            ?: $this->getServer('HTTP_HOST');
Anders Nygren
@litemerafrukt
Mar 30 2017 21:05
Jag läste om den varianten i ett annat sammanhang, då kallades den för “quirky behavior of php ternary operator"
så den varianten vågade jag inte använda :smile:
Mikael Roos
@mosbth
Mar 30 2017 21:06
coolt. visst blir det snyggare? den funkar som den nyare ?? (fast den nya klarar även undefined)
Anders Nygren
@litemerafrukt
Mar 30 2017 21:06
Det blir mycket bättre
Mikael Roos
@mosbth
Mar 30 2017 21:07
det där gjorde vi bra.
Anders Nygren
@litemerafrukt
Mar 30 2017 21:07
:)
Men jag tror testerna falerar, där finns både undefined och tomma strängar...
Mikael Roos
@mosbth
Mar 30 2017 21:08
make test passes
Anders Nygren
@litemerafrukt
Mar 30 2017 21:08
coolt
Mikael Roos
@mosbth
Mar 30 2017 21:08
jag är dock lite osäker på sista delen: $url .= $server . $port . htmlspecialchars($uri);
Anders Nygren
@litemerafrukt
Mar 30 2017 21:09
jag har glömt vad som händer innan
Mikael Roos
@mosbth
Mar 30 2017 21:09
möjligen skulle man göra htmlspecialchars på $server. och man borde kolla upp om det inte är mer rätt att göra urldecode på $uri.
Anders Nygren
@litemerafrukt
Mar 30 2017 21:09
just det, htmlspecial på server är en god ide
Mikael Roos
@mosbth
Mar 30 2017 21:10
man borde fylla på med lite såna säkerhetstester, så hade man vetat vilket som var rätt.
Anders Nygren
@litemerafrukt
Mar 30 2017 21:10
urldecode har jag inte träffat ännu...
Mikael Roos
@mosbth
Mar 30 2017 21:12
jag lägger htmlspecialchars på server, det kan inte bli fel, måste kolla upp urldecode på $uri-delen, behöver testa och testfall och läsa på.
ska tagga.
Anders Nygren
@litemerafrukt
Mar 30 2017 21:18
fint :) då ska jag börja på me-sidan imorgon.
Thomas Hedlund
@ThomasHedlund1_twitter
Mar 30 2017 21:25
Är det meningen att min htdocs-mapp ska försvinna så fort jag skapat .htaccess-filen? Jag kommer åt htdocs på studentservern men inte på localhost genom xampp.
Mikael Roos
@mosbth
Mar 30 2017 21:32
låter som din localhost inte gillar htaccess-filen, det kan bli såna effekter då. kan det finnas nåt fel i den?
Thomas Hedlund
@ThomasHedlund1_twitter
Mar 30 2017 21:34
jag använde mig utav "ln -s .htaccess_wwwstudent .htaccess" i cygwin. Är det i .htaccess_wwwstudent som kan det vara något fel? Jag har bara kopierat filer och inte skrivit något eget.
förutom att jag ändrade mosstud till thhe16
Mikael Roos
@mosbth
Mar 30 2017 21:35
skippa den där ln, ta bara och kopiera filen istället.
Thomas Hedlund
@ThomasHedlund1_twitter
Mar 30 2017 21:35
ok ska testa
Mikael Roos
@mosbth
Mar 30 2017 21:36
om jag gjorde ln i artikeln så borde jag ta bort det
Thomas Hedlund
@ThomasHedlund1_twitter
Mar 30 2017 21:37
sådärja nu funkar det. Tack för hjälpen
jo det är ln som används i artikeln
Mikael Roos
@mosbth
Mar 30 2017 21:51
fixar det
nu är Request och även View taggade i nya versioner, man får ge packagist några minuter att uppdatera sig