トップページ⇒php
1001コメント296KB

くだすれPHP(超初心者用)6

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/04/05(日) 22:04:26ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
ttp://www.php.net/
ttp://jp.php.net/

前スレ
くだすれPHP(超初心者用)5
http://pc11.2ch.net/test/read.cgi/php/1227303362/

関連スレ
PHP総合雑談スレ
http://pc11.2ch.net/test/read.cgi/php/1200314111/
PHP初心者勉強会やらんかね!
http://pc11.2ch.net/test/read.cgi/php/1209137730/
04874832009/07/01(水) 15:46:50ID:???
>>484-486
ありがとー!
出来ました!
0488nobodyさん2009/07/01(水) 20:12:35ID:qb2GZerK
phpのstring型って最大1024byteまでの文字列しか格納できないっぽいんですが、
最大許容量の変更ってできるのでしょうか?

今現在、1024byte以上入るであろうDBからの値をどのように取り出そうか思案中です。
0489nobodyさん2009/07/01(水) 21:29:11ID:???
それはllSayの制限で、phpの制限ではありません。
0490nobodyさん2009/07/01(水) 21:52:39ID:???
>>489
llSayが良くわからないですけど、要するに1024byte制約はしょうがないということになるのでしょうか?
0491nobodyさん2009/07/01(水) 22:18:49ID:vUu+Pn00
なんでそうなるんだw
0492nobodyさん2009/07/01(水) 22:22:45ID:???
>>488
>phpのstring型って最大1024byteまでの文字列しか格納できない
ソースぷりーず。
0493nobodyさん2009/07/01(水) 23:06:52ID:???
>488
ガタガタ抜かす前に試せばいいじゃん。
何十万文字程度なら余裕で入るぜ。
04944882009/07/02(木) 08:53:38ID:???
>>491
>>492
>>493
確かに、サンプルソースとまでいかないまでも、ソースイメージを示せなかったのは申し訳ないです。
下記のソースイメージでも半角英数字1000文字程度で文字列をくっつけられなくなります。

$sql = ' select * from hogehoge '
$sql .= ' where foo.bar = 1 '
for () {
// ここで$sqlに文字列appendしまくり
}
・・・
というだけの単純にsql文をくっつけまくりソースです。

このことから、string型は1000文字=1024byte制限があるのではないかと勝手に推測してました。

でも、何十万文字も入るのであれば、別の原因が考えられますね。
ちょっとappendしない場合はどうなるか適当に試してみます。
04954882009/07/02(木) 08:54:59ID:???
↑
イメージはわかると思うのでどうでも良いとは思いますが、
$sql = ' select * from hogehoge '
$sql = ' where hohoge.bar = 1 '
の間違いでした。
0496nobodyさん2009/07/02(木) 09:02:17ID:???
わけわからん             アーメン
0497nobodyさん2009/07/02(木) 09:04:31ID:???
>文字列をくっつけられなくなります
どんな症状を見てこう判断したか、それがためのソースだろうになぁ・・・
0498nobodyさん2009/07/02(木) 09:21:03ID:???
以下エスパー的回答

できあがった$sqlの内容がおかしいに10000ペソ。
データベースに投げる前にechoで確認すべし。半角スペースがないとかクォーテーションをエスケープしてないとか。
04994882009/07/02(木) 09:21:26ID:???
みなさん、申し訳ございません。

すごい単純ミスでした。

環境だけの問題でした。

原因は eclipse + xdebug環境において、eclipse上で参照できる変数の最大文字数が1024byte制限があるだけのようです。
sql文(1024byte以上の)を生成した場合、eclipseの変数の値参照では途中で文字が切れているのですが、正しく実行できました。

デバッガが整った環境に慣れすぎてしまった私が問題でした。
デバッガはあくまでもデバッガだと改めて考え直さないと駄目ですね。
0500nobodyさん2009/07/02(木) 10:13:39ID:???
そりゃ親切に省略してくれてるだけだろ
0501nobodyさん2009/07/02(木) 10:15:19ID:???
全部表示されたらえらいことになる場合もあるしなw
0502nobodyさん2009/07/03(金) 11:33:57ID:???
test_image.jpgみたいなファイルネームを。
test_image_**.jpgに読み変えてリクエストしたりしたいんですけど、
どうすればいいですか?
※**はランダムな数値が入ります。
0503nobodyさん2009/07/03(金) 11:35:42ID:???
ttp://www.php.net/manual/ja/function.mt-rand.php
0504nobodyさん2009/07/03(金) 11:35:54ID:???
http://www.php.net/manual/ja/function.pathinfo.php
こういうの使うとファイル名と拡張子に分離できる
0505nobodyさん2009/07/03(金) 11:37:17ID:???
>>504
有難うございます。読んできます。
0506nobodyさん2009/07/03(金) 11:50:05ID:???
>>505
$path_parts['filename']が使いたいけど4.4.8なんでダメポ。。。

拡張子は取れるので最悪、test_image.jpg_**.jpgこんな感じで読むしかないのか・・・
0507nobodyさん2009/07/03(金) 11:50:59ID:???
何のシステムを作ろうとしてんの?
0508nobodyさん2009/07/03(金) 12:02:18ID:???
>>507
普通に1つのアイテムに複数画像がある場合、
ランダム上限値とファイルネームの番号が連動していれば、
管理もsqlリクエストも一発で済むかなと思って。
0はFALSE。
0509nobodyさん2009/07/03(金) 12:20:48ID:6dZpOUUM
http:://hogehoge:[email protected]/hello.php?cmd=add&user=hoge@pass=hoge
のようなことをwgetみたいにphpでやらせたいのですがcurl以外でもっとお手軽な関数ってないですか?
0510nobodyさん2009/07/03(金) 12:45:56ID:???
file()
0511nobodyさん2009/07/03(金) 12:49:03ID:???
basename()とpathinfo()の合わせ技で楽に出来そうなので
そうしてみます。サンクスコ。
05125022009/07/03(金) 16:43:01ID:???
$test_chenge_image = 5;
$chenge_image_path = test_image;

$chenge_image = '_' . mt_rand(1, test_chenge_image);
$ex_name = pathinfo($chenge_image_path);
$ex_type = '.' . $ex_name['extension'];
$fl_name = basename($chenge_image_path, "$ex_type");
echo $fl_name . $chenge_image . $ex_type;

大体こんな感じで目的達成なんですけど、
もっとエクセレントにそうきゅーとに書けますか?
あと、mt_rand()で出来た数値が1桁なら
01.02.03.04.05みたいにするにはどうすればいいですか?
0513nobodyさん2009/07/03(金) 16:49:17ID:???
自己レス
printf()
0514nobodyさん2009/07/03(金) 16:50:01ID:???
sprintfだろ
0515nobodyさん2009/07/03(金) 17:16:50ID:???
> $chenge_image = '_' . mt_rand(1, $test_chenge_image);
は、こう
$chenge_image = '_' . sprintf($chenge_image . "%0" . 2 . "d", mt_rand(1,$test_chenge_image));
書き換えた。

お前の日記かと怒られそうなので終了。
0516nobodyさん2009/07/03(金) 17:19:43ID:???
いわきりさんのphp_nmz_sample.tar.gz
というものを見てみたいのですがリンクが切れています。
どなたかお持ちではありませんか?

もうnamazuというのは使われていないのでしょうか?
0517nobodyさん2009/07/04(土) 15:06:32ID:bVCHq/G1
SimpleXMLを使って
<a><b>hoge<c>hoge</c>hoge</b></a>
というXMLから
hoge<c>fuga</c>hoge
を取り出すってできませんか?
echo xml->a->b;だと
hogehoge
echo xml->a->b->asXML();だと
<b>hoge<c>fuga</c>hoge</b>
になってしまう
0518nobodyさん2009/07/04(土) 15:07:50ID:???
×<a><b>hoge<c>hoge</c>hoge</b></a>
○<a><b>hoge<c>fuga</c>hoge</b></a>
0519nobodyさん2009/07/04(土) 19:24:14ID:???
>>517
SimpleXMLの範囲では出来ないと思う。
タグcを一旦変換するか、後者の両端のタグをストリップするんじゃダメ?
0520nobodyさん2009/07/04(土) 21:30:50ID:bVCHq/G1
>>519
> 後者の両端のタグをストリップするんじゃダメ?
これしかないかなと思いつつも、
もっと直接的な方法がないかなと
タグを変換ってどうやるんでしょうか?
タグbの名前を変換して
<foo>hoge<c>fuga</c>hoge</foo>とするか
hoge→<c>fuga</c>→hoge
と展開したりってのができないかなと
0521nobodyさん2009/07/04(土) 21:39:46ID:???
>>520
例えば<c>→{c}とか、他に出てこない文字列に置き換えてからパースするとか。
あとで{c}→<c>にもどせばおっけ、っていう意味。

どんな場面でどういう事がやりたいのかにもよるけど。
なんか、htmlのパースしたいようにも見えるな。
0522nobodyさん2009/07/05(日) 07:52:14ID:UWotW+RP
スイマセン、風俗店のサイトで
その店の風俗嬢が写メを載せて近況報告をしているようなものや
リアルタイムで店の近況を口語文で書いていて、風俗嬢の画像などが載っている
ものは
すべてブログを埋め込んでいると考えて良いのでしょうか?
0523nobodyさん2009/07/05(日) 08:05:30ID:???
>>521
xmlをパースしてhtmlを吐く場合に
そのxmlのタグ内をhtml風にマークアップしたい場合
どうやって出力すればいいのかなと
0524nobodyさん2009/07/05(日) 09:02:21ID:???
>>522
考え方はそうだが、ブログとか掲示板とか決まったスクリプトではない。
0525nobodyさん2009/07/05(日) 11:37:56ID:LafHq5/o
初めての投稿ですが教えていただきたいです。
配列を設定して、最大値と最少値と平均値を出す問題を解いているのですが平均がうまく出来ません。
自分の書いたプログラムは下の物になりますがどこがおかしいのでしょうか?
教えてください。
<?php
$data=array(8,7,3,1,4,2,5,6,10,9);
foreach($data as $val){
echo $val." ";
}
$min=100;
$max=0;
$total=0;
foreach($data as $val){
$total=$tatal+$val;
if($val<=$min){
$min=$val;
}
if($val>$max){
$max=$val;
}

}
$ave=$total/10;
echo "max :".$max." ";
echo "min :".$min." ";
echo "ave :".$ave." ;"

?>
0526nobodyさん2009/07/05(日) 11:39:24ID:LafHq5/o
自己解決しました、スレ汚しすいません。
0527nobodyさん2009/07/05(日) 12:49:02ID:???
<?php
$data=array(8,7,3,1,4,2,5,6,10,9);
echo "max :".max($data)." ";
echo "min :".min($data)." ";
echo "ave :".(array_sum($data)/count($data))." ;"
0528nobodyさん2009/07/05(日) 17:08:52ID:???
?>
0529nobodyさん2009/07/05(日) 19:01:31ID:???
閉じタグはいらんよ
0530nobodyさん2009/07/05(日) 19:05:46ID:???
?> (キリッ
0531nobodyさん2009/07/05(日) 20:12:16ID:???
?><!-- P.S. I love you.... -->
0532nobodyさん2009/07/05(日) 21:00:29ID:???
てか、行がおわってない。
0533nobodyさん2009/07/05(日) 21:04:58ID:???
最後の行は ; がなくてもいいよ
0534nobodyさん2009/07/05(日) 21:09:46ID:???
その場合閉じタグが必要。
0535nobodyさん2009/07/05(日) 21:11:44ID:???
>>528 へ戻って繰り返し。
0536nobodyさん2009/07/05(日) 22:19:50ID:???
." ;" これがほんとに意図した出力かと
0537nobodyさん2009/07/05(日) 23:16:31ID:???
後だしじゃんけん?
0538nobodyさん2009/07/06(月) 12:47:06ID:wMd3vz+Y
PHPのよい練習問題が乗ってるサイトってないですか?
0539nobodyさん2009/07/06(月) 12:48:54ID:???
2ch
0540nobodyさん2009/07/06(月) 13:57:22ID:Zv6if7ao
PHPでできることの限界が知りたいです
何ができて
何ができないのか教えてください
0541nobodyさん2009/07/06(月) 13:58:39ID:???
つマニュアル
0542nobodyさん2009/07/06(月) 14:07:26ID:fHQNm0aa
あああっ!mySQL 、日本語キーボードで使っていると `` が入力しにくいんだよこんちくしょうめ
0543nobodyさん2009/07/06(月) 14:12:39ID:???
右手小指と中指で楽じゃん
0544nobodyさん2009/07/06(月) 16:30:25ID:???
自分一人しかアクセスしない管理画面(パスワードとホストで制限)
のフォームとかでもhtmlspesialcharsとかかますべき?
0545nobodyさん2009/07/06(月) 16:41:11ID:???
>>544
かますべきだと思う(´ω`)
忘れた頃に仕様変更したら変なエラーに悩まされるとかいうことが
あるし。
0546nobodyさん2009/07/06(月) 17:23:03ID:???
自分ひとりしかアクセスしなくても、URL見つけられたら・・・という
万が一もあるし
0547nobodyさん2009/07/06(月) 17:31:46ID:???
普通認証かけるだろ
0548nobodyさん2009/07/06(月) 17:44:20ID:???
いやそもそも認証画面での話だろw
0549nobodyさん2009/07/06(月) 17:51:51ID:???
>>548
それは違うと思う
0550nobodyさん2009/07/06(月) 17:55:18ID:???
つか管理画面のフォームで何を表示するのかにもよるんじゃ?
質問者はアクセスするページによってXSSの危険性が違うと認識してる?
パスワードとホストで制限って書いてるからふとそう思った
05515442009/07/06(月) 18:18:24ID:???
データベースの統計情報みたいなやつとか
昨日何人が登録したとか、1ヶ月以上ログインしていないユーザーを
削除するとか
管理人しか使わない訳だし、例えばワード検索で自演XSSやSQLインジェクションができてもいいのかなと
やるには自分で不正コード打ち込まないといけないじゃない?
0552nobodyさん2009/07/06(月) 18:22:45ID:???
打ち込まなきゃいいじゃない?
05535442009/07/06(月) 18:23:36ID:???
だからいらないんじゃないのって
0554nobodyさん2009/07/06(月) 18:37:20ID:???
じゃそれでいいんじゃないのって
0555nobodyさん2009/07/06(月) 18:47:29ID:Cz5ZS8nJ
PHP初心者でsmartyも無知ですが
アドバイスを頂けたらと思っております

<!--{assign var=test value="`$smarty.const.URL_DIR`listblock/list[@].html"}-->
<!--{if $smarty.server.php_self==$test}-->

@のページ時だけ表示
こういう感じでソースを書いてみたら
(例えば.html)で成功したのですが
@の部分を任意の数字のみで複数指定したいのですが
どのようにしてやると宜しいでしょうか?

array(1,5,6,8,10 のような感じになるのでしょうか?
0556nobodyさん2009/07/06(月) 19:05:05ID:???
in_arrayでよいのでわ?
0557nobodyさん2009/07/07(火) 12:33:10ID:???
PHPというかもはや計算の問題なんですが、
$int = 500;
if ($int >= 568) { $lv = "Lv9"; }
elseif ($int >= 406) { $lv = "Lv8"; }
elseif ($int >= 278) { $lv = "Lv7"; }
elseif ($int >= 180) { $lv = "Lv6"; }
elseif ($int >= 108) { $lv = "Lv5"; }//5*5*2(50)+4*4*2(32)+3*3*2(18)+2*2*2(8)
elseif ($int >= 58) { $lv = "Lv4"; }//4*4*2(32)+3*3*2(18)+2*2*2(8)
elseif ($int >= 26) { $lv = "Lv3"; }//3*3*2(18)+2*2*2(8)
elseif ($int >= 8) { $lv = "Lv2"; }//2*2*2(8)
else { $lv = "Lv1"; }//0
echo "{$lv}<br>";
というソースを実行するとLv8<br>が出力されます。
これを
$lv = $int / (ごにょごにょ演算);
的な感じで1行(もしくは数行)にしたいのですが、計算式がわかりません…
$intと比較する数字はコメント部分の通りです。
どなたか教えていただけるとありがたいです。
アホな質問ですいません。
0558nobodyさん2009/07/07(火) 12:36:30ID:???
無理に短くしないで関数にすればいいだけじゃん。

ロジックを整理するならともかく、書き方で短くするだけだと
あとで条件変更しにくくなるよ。

あと、個人的には、$int という変数名はinteger 一般みたい
で抵抗がある。
0559nobodyさん2009/07/07(火) 12:43:51ID:???
forで引いていけばいいじゃん
0560nobodyさん2009/07/07(火) 13:41:04ID:???
switchではダメなん?
0561nobodyさん2009/07/07(火) 14:58:56ID:???
>>557

$int = 500;
$lv = levelcheck($int);
echo "{$lv}<br>";

function levelcheck($int){
if ($int >= 568) { $lv = "Lv9"; }
elseif ($int >= 406) { $lv = "Lv8"; }
elseif ($int >= 278) { $lv = "Lv7"; }
elseif ($int >= 180) { $lv = "Lv6"; }
elseif ($int >= 108) { $lv = "Lv5"; }//5*5*2(50)+4*4*2(32)+3*3*2(18)+2*2*2(8)
elseif ($int >= 58) { $lv = "Lv4"; }//4*4*2(32)+3*3*2(18)+2*2*2(8)
elseif ($int >= 26) { $lv = "Lv3"; }//3*3*2(18)+2*2*2(8)
elseif ($int >= 8) { $lv = "Lv2"; }//2*2*2(8)
else { $lv = "Lv1"; }//0
return $lv;
}
0562nobodyさん2009/07/07(火) 15:07:28ID:???
>>561
頭わりぃw
0563nobodyさん2009/07/07(火) 16:05:37ID:???
>>557
$intがlv0の時1*1*2だと都合がいいので($int+2)で考える。
自然数の自乗の和は1/6*(2n^3+3n^2+n)なので、3次方程式の解の公式に、
a=2,b=3,c=1,d=0を当てはめる。
3次方程式の解の公式は
http://img.f.hatena.ne.jp/images/fotolife/d/deke/20090131/20090131185432_original.gif
こんなかんじ。
あとは自分でがんばってくれ。

0564nobodyさん2009/07/07(火) 16:13:19ID:???
一つの公式作ってそれだけで同じ種類のあらゆる計算に当てはめるって、
誰もが一度はやってみるよなw

数学の世界ならいいけど、コンピュータだと演算方法が限られてるから、
そんなことやっても誰も得しないという。
0565nobodyさん2009/07/07(火) 16:51:38ID:???
>>557が式が欲しいって言うからさ。
0566nobodyさん2009/07/07(火) 17:15:47ID:???
for ($i = 1; $i < 10; $i++) {
print level($i)." ";
}

function level($level) {
for ($i = 1; $i <= $level; $i++) {
$return += (1 + $i) * (1 + $i) * 2;
}
return $return;
}
05675572009/07/07(火) 23:09:14ID:???
みなさんレスありがとうございます。
一応求めていたのは>>563さんのものだったのですが、
アホなので理解できませんでしたw
$lvが増えていくと処理が遅くなりそうですが、
とりあえず現状は9までで間に合うので>>566さんので妥協しようかと思います。
ありがとうございました。
0568nobodyさん2009/07/08(水) 02:20:29ID:???
つ変数の初期化
つpow

てか今の経験値で到達するレベルじゃなくて、今のレベルに必要な経験値を求める関数でいいの?
0569nobodyさん2009/07/08(水) 08:58:54ID:szsLUg6E
>>568
今の経験値からLvがいくつかなのを求めるということでしょ。
0570nobodyさん2009/07/08(水) 09:00:15ID:???
あげちゃったすまそ
0571nobodyさん2009/07/08(水) 10:06:03ID:???
だからそのために1〜99まで毎回ループして比較するわけ?って言ってんの
0572nobodyさん2009/07/08(水) 10:26:11ID:???
その関数で配列作っておいて
配列スキャンするのがいいんじゃないかな。
0573nobodyさん2009/07/08(水) 14:29:28ID:???
99回のループが問題になるって、どんなんだよw
それに、3次の解の公式の方が重たいだろ、複素数出てくるし3乗根出てくるし。
0574nobodyさん2009/07/08(水) 14:36:42ID:???
お前頭悪いだろ
0575nobodyさん2009/07/08(水) 14:44:00ID:???
>>574
理解できないならそう言えばいいのに。
0576nobodyさん2009/07/08(水) 15:55:04ID:???
この一連の流れがまったくわかってない人がいるね
0577nobodyさん2009/07/08(水) 18:11:27ID:m/DVsNfk
PHPの完全な初心者です。
さきほど、http://windows.php.net/download/ よりZipをDLし、本の指示に従い
「php.ini-recommened」をコピーして「php.ini」にしようとしましたが「php.ini-recommened」
が見つかりません(似たようなものなら有りますが)。

DL→解凍した中身は下記の通りです。
http://uproda11.2ch-library.com/185843edT/11185843.jpg 
どうしたら良いでしょうか?
0578nobodyさん2009/07/08(水) 18:23:14ID:???
そのくらいで迷うなら本とバージョンもあわせたほうがいいかもね。

php.ini-development や php.ini-production の中見てみた?
あと一緒に添付されてるinstall.txtとかも読もうぜ
0579nobodyさん2009/07/08(水) 18:25:03ID:???
応用の利かなさっぷりがすごいな…
0580nobodyさん2009/07/08(水) 19:21:59ID:???
>>576
こうだろ。

568==571<今のレベルと次のレベルの経験値を保存しとけばいいだろ。
573<毎回99回のループで計算してなにか問題でも?
0581nobodyさん2009/07/08(水) 19:45:09ID:???
572 でいいと思うのだが
0582nobodyさん2009/07/08(水) 19:53:20ID:???
572でいいな。
0583nobodyさん2009/07/08(水) 23:49:11ID:???
俺も>572のようにLvと総経験値の対応テーブルを持っておくに一票。

・計算式の変更が起きる可能性は高いだろうから、簡単に差し替えられるようにした方が便利
・また、変更があった際に、Lv10とLv2で同じ計算式になるって保証もないので、式の一般化はしない方が便利
・毎回算出しても問題になるような量の計算でもないが、無駄な計算を回避できるに越した事はない

>563 のような式そのものをコードの中に組み込むのは
・後でどういう式で計算してるのか分かるように、ロジックをソースコードの中に書いておきたい
・「ルチ将軍のLvは1300だ」とか「私の戦闘力は53万です」とか、データ量が多すぎで一覧表にしてられない
場合とかかな。
0584nobodyさん2009/07/09(木) 00:29:26ID:???
ワンチップマイコンでもあるまいし今の時代に
ソースサイズ必死で小さくする理由があるんかねw
0585nobodyさん2009/07/09(木) 00:41:28ID:???
そもそもPHPが毎回起動すんだろ。

IF文が200個くらい増えたところで、
起動プロセスよりはるかに軽い。
0586nobodyさん2009/07/09(木) 00:45:18ID:???
PHP毎回起動とか何時代のインフラだよ
■ このスレッドは過去ログ倉庫に格納されています