初心者向けPHP練習問題リンク+学習ログ

  • 2009/02/04(水) 00:00:00

日記

もうすぐにぽたんの誕生日なので本気出す。



PHPの基本を復習しよう

自分は今まで参考書とGoogleを頼りにコードを書いていたが、
何かを見ながらだとなかなか覚えないよね><

ある程度、基礎的なことを理解したら(ってまだ理解してないんだけどドント・マインド)、
計算ドリル的なノリで、1000本ノックをするべし!するべし!!

で、PHPの簡単な練習問題を探してみた。
私はとても役に立ったので、PHPを勉強中の初心者の方には是非&ぜひオススメしたい!
以下、易しい順にリンク張っておくにょ。


PHP基礎問題集(PreAlphaVersion) - 初心者のプログラミング体験記
# 基本中の基本をシンプルに復習。
 もうちょい難易度が高い練習問題もあるけど、私はそっちはやってないw

練習問題 - プログラミングスレまとめ in VIP
# これはなんとPHPの解答例が載っていないというまさかの村八分( ;Д;)

【お題】PHP学習課題スレ【出せや】 - WEBプログラミング@2ch掲示板
# これは良かった。
 疲れたときの3時のおやつには 『今の自分の心境をPHPで表すスレ』 がイイ!

新しくプログラミング言語を覚えたいときに行うべき10の練習問題 - IDEA*IDEA
# ひゃ!



復習を兼ねた感想など(長いので適当にスルーしてくださいナ)

配列いじり † (練習問題 - プログラミングスレまとめin VIP)
配列の先頭はそのままに、先頭以外の要素をすべて0に置き換える。

例: 置換前 3 5 2 4 2

   置換後 3 0 0 0 0



べにぢょの答え

<html>
<head>
<title>PHP練習問題 - 配列いじり</title>
</head>
<body>

<?php

$num = array(3,5,2,4,2);
foreach($num as $line){
echo $line;
}

echo "<br>";

$change = array(5,2,4);

$new_num = str_replace($change,0,$num);

foreach($new_num as $line){
echo $line;
}
?>

実行結果: 配列いじり - PHP練習問題

私の解釈は、出題者の意図とちと違っているような・・・。
確かに相違なく表示されているが、この問題ではこの方法の理解が問いたかったのだろうか?
うーむ。.....まぁいいか!!


一言メッセージ×10行のチャット、名前入力必要なし。 【お題】PHP学習課題スレ【出せや】 の >>11)

これは分からなかったので、>>12の解答をググりながら解釈。

<?php
$log = @file('chat.log');
 //chat.logを読み込んで$logに代入

if(!is_array($log)){ 
//$logが配列じゃなかったら
$log = array(); 
//配列にする
}

if(isset($_POST['monolog'])){ 
//$_POST['monolog']がセットされていたら
array_unshift($log, $_POST['monolog']."<br>"); 
//$logの先頭に$_POST['monolog']を追加

$log = array_slice($log,0,10); 
//$logの0番目から10番目までを取り出す

file_put_contents('chat.log',$log); 
//chat.logに$logを書き込む

header("location:2ch_12.php"); 
//リダイレクト
exit;
}
?>

<html>
<head>
<title>10行チャット - PHP学習課題スレ</title>
</head>
<body>
<p>10行チャット<br>
<form method = "POST" action = "2ch_12.php">
<input type="submit" value="送信">
<input type="text" name="monolog">
</form></p>

<?php
foreach($log as $idx=>$value){ 
//$logの要素を$valueに代入
echo "<hr>".$value; 
//$value表示
}
?>
<hr>
</body>
</html>



スレの解答例にはエスケープなかったけどいいのかな。
それと、ファイルを操作するときはロックをしないとまずいというのをどこかで読んだような・・・
どうなんだろう、この場合は要らないんだろか。
初心者がイキがって余計なことしない方がいいかな><と思ったが、せっかくの機会なので書いてみる。


べにぢょの答え(変更してない箇所は省略)

if(isset($_POST['monolog'])){
$post = htmlspecialchars($_POST['monolog'], ENT_QUOTES);
 //array_unshiftする前にエスケープ
array_unshift($log, $post."<br>");



さて、問題はどこでファイルにロックをかけるかだが・・・
$log = @file('chat.log'); の次はダメだ。
@flock($log,LOCK_SH); としたいところだけど、flock の第一引数はファイルポインタなので、
chat.log の内容を配列で読みこんだ $log は引数にできない。
となると、次にファイルに対してアクションを起こすのは file_put_contents('chat.log',$log);

だがしかし!こやつは開く&書き込むを1人でやってしまうので、止めに入る間がない。
くそぅ・・・万事休すか・・・・っ と思ったら、フラグていうのがあるらしい(゚∀゚)
じゃあ、これでいいのかな?

file_put_contents('chat.log',$log,LOCK_EX);
実行結果: 10行チャット - PHP学習課題スレ

ほ。とりあえずエラーは出ていない。
1人でチャットしながらコード直していったので、記念に貼っておく!

  


あ、そうだ。
下から2番目の「属性なの?」という発言について。
最初、「てすとだ」 とだけ書き込んだ chat.log をサーバーにUPしたのね。
そのあとフォームに 「ハローワールド!」 と入力して送信したんだが、何度リロードしても一向に変化なし。
「おい!聞いてるのか!!!」・・・なんて昔の私だったらキレるところだけど、
実はうすうすできない気がしていた。
アレだろ?パーミッションだろ?やっぱりな!そうくると思ってたぞ。
chat.log の属性を 666 に変えて、「属性なの?」 と入力してみる。
ほらキタ!書けた書き込めた!まいったか!
・・・という知られざるストーリーがあったのだった。とっぴんぱらりのぷぅ。



2ちゃんねるのスレなど見ていて思ったけど、他人が書いたコード見るのってちょっと楽しいね。


LINEで送る

この記事に対するトラックバック

この記事のトラックバックURL

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/19(木) 15:34:37

[PHP]配列の先頭はそのままに、先頭以外の要素をすべて0に置き換える

もう、1週間くらいまえのエントリーなので、乗り遅れ感満載ですが、べにじょさんのところで掲題の問題が紹介されてた。 ギークなお姉さんは好きですか 初心者向けPHP練習問題リンク+学習ログ で、回答例としていろんなかたがトラックバックをくださったそうだ。 ギークなお姉さんは好きですか 配列置換問題へのトラックバックありがとうございました! この中に、僕ならこう書くというものがなかったので、紹介する。だいたい、PHPというのは関数が多過ぎて、覚えるのがめんどくさい。特に配列操作関数は種

配列置換問題へのトラックバックありがとうございました!

e-165祝電 にぽたんさん、お誕生日おめでとうございました(・∀・) e-122配列置換の答えはひとつじゃない! 配列の先頭はそのままに、先頭以外の要素をすべて0に置き換える。 e-117初心者向けPHP練習問題リンク+学習ログ 先日のエントリ内で...

[PHP][writeback] 人のコードを見ることは大事だよね

最近PHPを書くのはやめてPythonというかGoogleAppEngine界隈でgeekDB入りを目指すtetsunosukeです(ぉ 見ることが大事だけじゃなくて、それについて自分も考えて書いてみることが大事だよね。ってことで。 ”ギークなお姉さんは好きですか:初心者向けPHP練習問題リンク+学

[Tech]「配列いじり」のコマンドライン版を作ってみた

ギークなお姉さんは好きですか 初心者向けPHP練習問題リンク+学習ログで書かれてた「配列いじり」のコマンドライン版を作ってみた。 とりあえずこんな感じかなぁ。

[php]配列の先頭以外の要素を0に置き換え

■初心者向けPHP練習問題リンク+学習ログ 配列の先頭以外の要素を0に置き換える場合自分ならこんな感じで作る。

この記事に対するコメント

この記事にコメントする

管理者にだけ表示を許可する