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

【PHP】下らねぇ質問はここに書き込みやがれ 25

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/07/23(日) 20:00:03ID:???
PHPに関するくだらねぇ質問用スレです。
ここならお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

過去スレは>>2
0514nobodyさん2006/07/31(月) 16:07:45ID:???
<?php
$pai = 3.141592;
$r = 10;
$h = 12;
$taiseki = 1 / 3 * $pai * $r * $h;
printf('三角錐の体積 = %d', $taiseki);
?>
0515nobodyさん2006/07/31(月) 16:07:46ID:???
頭痛が痛い
クーラー病にかかった
PHPで治すにはどうしたらよいですか?
0516nobodyさん2006/07/31(月) 16:12:18ID:???
頭痛が痛い
0517nobodyさん2006/07/31(月) 16:12:32ID:???
>>515
そと言って走って来い
0518nobodyさん2006/07/31(月) 16:13:35ID:???
>>515
無限ループさせて、ハードディスクの熱でぬくぬく!
0519nobodyさん2006/07/31(月) 16:15:00ID:???
>>517,518
解決しました
ありがとうございます
0520nobodyさん2006/07/31(月) 16:20:30ID:HekLsGeB
ひとつはfみたい。�dクス。他にないですか?
0521nobodyさん2006/07/31(月) 16:24:42ID:???
>>518
CPUだろ
0522nobodyさん2006/07/31(月) 16:28:21ID:HekLsGeB
オワタ。
楽しかった。ありがとう。
0523nobodyさん2006/07/31(月) 16:41:53ID:???
サイト内の共通する部分(ヘッダーメニューなど)を
PHPのinclude化したのですがwin IEだとインクルードした部分の
上にスペースができてしまいます。
しかし生成されたページのソースを表示してもなんらスペースができる
要因もないしインクルード処理をせずそのままページ上にhtmlを記述すると
スペースはできないのですが対処はあるのでしょうか?
0524nobodyさん2006/07/31(月) 16:46:21ID:???
IE改造
0525nobodyさん2006/07/31(月) 16:48:08ID:???
>>523
こないだの人?
前、なんて言われたか覚えてる?
0526nobodyさん2006/07/31(月) 16:50:23ID:???
>>156- と同じだね。
0527nobodyさん2006/07/31(月) 16:51:18ID:???
>>525
このあいだの人ではないとおもいます
0528nobodyさん2006/07/31(月) 16:52:35ID:???
>>523は、ソース上で改行があるのか、それとも表示上での改行(というか余白)なのかがわからない。
後者なら仕方無いだろ。

ユーザスタイルシートでマージン殺せ。
0529nobodyさん2006/07/31(月) 16:55:04ID:???
>>527
同一人物であろうがなかろうが、再現環境・スクリプトを提示しない限り
時間の無駄だからスルーの方向で
0530nobodyさん2006/07/31(月) 16:55:45ID:???
>>523
インクルードされるファイルの一番最後、
?>
の後に余計な改行が入ってる
0531nobodyさん2006/07/31(月) 16:58:47ID:???
間違いなく >>523 は画面上でのスペースのことを言っている。
要素のデフォルトマージンだろ。

Web板いけ。
05325232006/07/31(月) 17:06:52ID:???
>>156のとまったく同じ状況でした。
ちなみに答えは>>204の通りutf-8n保存で解決しました。
お騒がせスマソ
0533nobodyさん2006/07/31(月) 17:10:17ID:???
>>532 氏ね
0534nobodyさん2006/07/31(月) 17:14:02ID:???
<>
0535nobodyさん2006/07/31(月) 17:53:46ID:86BvdUEa
レスは検索してなかったみたいだけど、ちゃんと解決法も書いてるし、別にマナーも悪くないし、いいんじゃないか。
0536nobodyさん2006/07/31(月) 18:16:12ID:???
PHPって、空でないディレクトリの削除は自分で処理を書くしかないんですか?
再帰的にunlink-rmdirしていくのは、あまり本質ではないディレクトリ削除で
そこそこ行数が増えてしまうので、他の方法があれば是非ご教示ください
0537nobodyさん2006/07/31(月) 18:20:11ID:???
>>536
rm -Rf ./hoge/*\ rmdir ./hoge/
0538nobodyさん2006/07/31(月) 18:26:58ID:???
ちと、お聞きしたいのですが
例えばここWebプログラミング板の
subject.txt(http://pc8.2ch.net/php/subject.txt)を
file_existsで存在の確認をしようとしても
falseしか吐かないのですが、file関数で直接調べることは
不可能、というか許されてないのでしょうか?
0539nobodyさん2006/07/31(月) 18:35:52ID:???
>>537
シェル実行ということですか。
使われる対象が色々なOSである可能性があるので、ちょっと難しそうです。
0540nobodyさん2006/07/31(月) 18:44:08ID:???
>>536
>あまり本質ではないディレクトリ削除で
どういう意味だ?
0541nobodyさん2006/07/31(月) 18:45:29ID:???
>>540
ごめんなさい、深い意味はありませんが、
本来API1つで書けそうなコードに対して、再帰のための関数まで書かなければいけないのは
ちょっと嫌だなと思っただけです。

方法が無いならもちろん書きます
0542nobodyさん2006/07/31(月) 18:51:59ID:???
色んなOSならなおさらラッパー的な役割をしているPHPの関数を使うべきではないのだろうか。
0543(^ω^)2006/07/31(月) 18:56:33ID:????2BP(223)
ユーザーノートに10行ちょいの再帰コード乗ってるよ
0544nobodyさん2006/07/31(月) 18:57:27ID:???
ほかのwebサイトから取得したデータを
キャッシュする関数はありませんか?
0545nobodyさん2006/07/31(月) 19:04:07ID:???
>>542
とすると、やはりPHP関数で書くしかないんですね

>>543
ありがとうございます。それを使って書くことにします
0546nobodyさん2006/07/31(月) 19:14:27ID:63K97mub
質問お願いします。

アクセスログをDBに書いてるのですが
まれにへんなREFERERがきて

invalid byte sequence for encoding "UTF8"

というPostgreSQLのエラーがでます。
UTF-8には存在しない文字コードが含まれてるとのことなのですが
保存する前の文字列から
UTF8にありえない文字列を除去、または
他の文字列に変換するような便利な関数か方法はないでしょうか?
0547nobodyさん2006/07/31(月) 19:26:48ID:AsAaXYbZ
くだらない質問します。

mysqlのクエリをphpで書くときに、たとえば
$sql = "update hogetbl set hogehoge ='$hogehoge'";
といったように、クエリ中の変数をシングルクオートで囲むのは危険なのですか?
\"".$hogehoge."\"のように書けば問題ないでしょうか?
0548(^ω^)2006/07/31(月) 19:33:23ID:???
>>546
http://blog.ohgaki.net/index.php/yohgaki/2006/06/12/a_a_a_a_a_ra_ca_a_oa_pa_fa_ma_sa_sa_raf
を参考にどうぞ
>>547
$hogehogeが外部から来て検査していない変数ならどちらも危険
0549nobodyさん2006/07/31(月) 21:11:59ID:???
>>547
っていうか、その書き方だと$hogehogeは変数だとみなされず、
単なる文字列だと判断されるぞ。
0550nobodyさん2006/07/31(月) 21:16:44ID:???
>>549
んなこたぁない
05515462006/07/31(月) 21:55:58ID:???
>>548
ありがとうございます
encoding attackとみなすのはちょっとあれだったので
mb_convert_encoding($s, "UTF-8", "UTF-8")
をかますことにしました。
0552nobodyさん2006/07/31(月) 21:56:54ID:???
>>547
DBインターフェースを利用してバインドしろ
PEAR::DB の場合は
$result = $db->query("update hogetbl set hogehoge=?", array($hogehoge));

変数の値を自動的にquoteしてくれる
0553nobodyさん2006/07/31(月) 22:46:23ID:???
>>547
え。むしろシングルクオートの方が普通じゃないのか?
つか、危険云々はシングルだろうとダブルだろうと全然変わらんよ。
なんでそんなので危険率が変わると思ってるのか、それが気になる。
どっからそんな誤った知識を聞いてきたんだ。
0554nobodyさん2006/07/31(月) 23:25:37ID:WXdtFlcA
windowsXP PHP5.1.4です。

<FORM ACTION="form02.php" METHOD="POST">
<textarea name="honbun" rows="4" cols="40"></textarea><br>
<input type="submit" value="送信する"><input type="reset" value="リセット">
</FORM>

<?php

$honbun = $_POST["honbun"];

// ↓改行を正規表現で\nにして、それでarrayに入れたつもりになってる
$honbun = explode("\n",$honbun);

//そうしたら↓で上手くいくかなと思いましたがダメでした。
$gyo = count($honbun);
for($i=0; $i > $gyo; $i++) {
echo "$honbun[$gyo]"."<br>\n";}

改行の置き換え方がダメな気がするんですが
こういう場合、どうやってtextareaからの改行を
配列に振り分けたら良いんでしょうか...
0555nobodyさん2006/07/31(月) 23:32:15ID:???
$honbun = explode("\n",$honbun);
$honbun = explode("\r",$honbun);
$honbun = explode("\n\r",$honbun);


for($i=0; $i < $gyo; $i++)
05565542006/07/31(月) 23:41:01ID:???
ありがとうございます!
正規表現以前に、条件は$i < $gyo だし
arrayは$honbun[$i]ですね...orz
0557nobodyさん2006/07/31(月) 23:44:24ID:???
>>554
> $gyo = count($honbun);
> for($i=0; $i > $gyo; $i++) {

そのループ条件は $i < $gyo の間違いだと思う。
それじゃいきなり終わっちゃうから1行も表示されないだろうw
0558nobodyさん2006/07/31(月) 23:45:48ID:???
>>555
"\n\r"は"\r\n"じゃない?
あと、"\n"や"\r"でexplodeする前にまず"\r\n"でexplodeだと思う。
0559nobodyさん2006/07/31(月) 23:52:57ID:???
まずは改行コードの統一をしてから
\r\n→\n、\r→\n、\nでexplode
0560nobodyさん2006/08/01(火) 00:07:43ID:???
掲示板を触っているんですが、特定文字列を含む書き込みを弾くには
どのような関数を使えば良いでしょうか?
05615542006/08/01(火) 00:09:34ID:???
str_replace("\r\n","\n",$honbun);
str_replace("\r","\n",$honbun);

で統一してからexplodeするようにして、変数があべこべになってたのを
直したら無事動きました。
ありがとうございますm(_ _)m
0562nobodyさん2006/08/01(火) 00:13:37ID:???
str_replace(array("\r\n", "\r"), "\n", $honbun);で一発じゃないっけ?
0563nobodyさん2006/08/01(火) 00:39:18ID:???
>560
http://jp2.php.net/str_pos
0564nobodyさん2006/08/01(火) 01:02:56ID:rUBuvQ+2
スクリプトのデザインについて質問です。

データベース(MySQL)を使うのですが、ふつう、テーブルはあらかじめ
作成しておくべきなのでしょうか?
0565nobodyさん2006/08/01(火) 01:25:18ID:???
どっちでも良いんじゃない。
自分は最初に設計してるけど、大抵後から変更でてくる
0566nobodyさん2006/08/01(火) 01:44:57ID:???
>>564
スクリプトからのテーブル作成ってことなら普通しない。
0567nobodyさん2006/08/01(火) 02:26:07ID:???
変数が半角英数字かどうか調べるにはどうすれば良いのでしょうか?
0568nobodyさん2006/08/01(火) 02:39:57ID:s+Er9w14
$str = "hogehoge";
list($array[]) = split('',$str);
print_r($array);

文字を一文字ずつ区切ろうとしたのですが、
Warning: split() [function.split]: REG_EMPTY in
と出てうまくいきません。
一文字ずつ区切るのはできないのでしょうか?
0569nobodyさん2006/08/01(火) 02:45:07ID:s+Er9w14
str_splitで解決しました
0570nobodyさん2006/08/01(火) 03:43:57ID:???
>>567
そういう関数が用意されてるから調べてみるといいよ。
0571nobodyさん2006/08/01(火) 07:51:08ID:???
>>568
配列にしなくても$str{0}で"h"、$str{1}で"o"にアクセスできるけどね
0572nobodyさん2006/08/01(火) 10:23:16ID:oOf+GkNU
547です。
みなさんレスありがとうございます。

危険度という意味では大差ないということでOKでしょうか?
クエリ文のシングルクオートは危険というのを、どこかで聞きかじった気がしたので確認させて頂きたかったのです。ありがとうございました。
0573nobodyさん2006/08/01(火) 10:30:30ID:???
>>547
おいおい。結論がおかしい。
とにかく危険なのには変わりないんだから >>552 にあるような書き方に改めな。
0574nobodyさん2006/08/01(火) 10:39:34ID:???
>>572
シングルクォートであるとかないとかじゃなくて、
その変数をきちんとエスケープ関数に通したかどうかを気にしろ。
0575nobodyさん2006/08/01(火) 10:41:57ID:???
俺はシングルとダブルは使い分けている
エスケープ文字がうざいから
0576nobodyさん2006/08/01(火) 10:43:45ID:???
>>575
今はそういうことを言っているんじゃない。論点をずらすな。
関係ない戯言は他所で書け。
0577nobodyさん2006/08/01(火) 10:46:04ID:???
>>572
危険度は大差ないというか「どっちも危険」。
多分、聞きかじった内容を思いっきり勘違いしてる。
実際はクオートは関係なく、それ以外にもっと重要な要素が抜け落ちてる。
>>575
それはPHPのクオートの話であってMySQLのクオートとは別の話。
0578nobodyさん2006/08/01(火) 10:48:12ID:rUBuvQ+2
マニュアルにある

function quote_smart($value)
{
if (get_magic_quotes_gpc()) {
$value = stripslashes ($value);
}

// 数値あるいは数値形式の文字列以外をクオートする
if (! is_numeric($value)) {
$value = "'" . mysql_real_escape_string ($value) . "'";
}
return $value;
}

これでいいじゃん?
0579nobodyさん2006/08/01(火) 10:49:19ID:rUBuvQ+2
>>565-566
意見ありがとうございました。
貝から操作してCREATE TABLEします・・・
0580nobodyさん2006/08/01(火) 10:57:59ID:???
>>578
magic_quote設定なんていちいち見ないなー。
汎用のライブラリ作るんならそこまでやってもいいと思うけど、普通の開発じゃ無駄じゃない?
素直に
"select * from table where col = '" . mysql_escape_string($value) . "'";
でいいじゃん。
0581nobodyさん2006/08/01(火) 10:59:17ID:???
>>580
いや、だから、bind とか prepared statement でいいじゃん。
0582nobodyさん2006/08/01(火) 11:02:44ID:???
>>581
ちょっとしたちっこいスクリプトにまでいちいちPEARいれてらんねー
0583nobodyさん2006/08/01(火) 11:07:43ID:???
>>582
俺もそう思う。
0584nobodyさん2006/08/01(火) 11:09:14ID:???
perl に比べれば入れるもの少ないのだから、そんなにめんどうだとは思わないけどな
0585nobodyさん2006/08/01(火) 11:15:42ID:???
プリペアドステートメントに渡したデータは自動的に引用符で括られるの知らんかった・・・

みんなPDOは使ってないの?
0586nobodyさん2006/08/01(火) 11:46:33ID:???
>>585
俺はPDOだよ
0587nobodyさん2006/08/01(火) 12:38:32ID:???
俺はPEDだ
0588nobodyさん2006/08/01(火) 12:56:22ID:i9MoMR6e
MySQLなんですが、あるフィールドに指定された値(例えば「id」というフィールドに「mona」という値)
が存在するかを調べる関数はありますか?
0589nobodyさん2006/08/01(火) 12:59:37ID:???
俺は3DOリアル
0590nobodyさん2006/08/01(火) 13:12:15ID:???
ADOってマイナー?
0591nobodyさん2006/08/01(火) 13:13:32ID:???
>>590
マイナーじゃない
むしろ、メジャーの方に入る
0592nobodyさん2006/08/01(火) 13:21:28ID:???
>>588
SQLの勉強したら?
スレ違い。
0593nobodyさん2006/08/01(火) 13:38:40ID:???
>>588
ある。
0594nobodyさん2006/08/01(火) 13:51:37ID:???
>>591
よかった
これからも使い続けよう
0595nobodyさん2006/08/01(火) 14:06:28ID:???
>>576
あんたひどいね。
0596nobodyさん2006/08/01(火) 15:52:25ID:???
セッション変数に数や容量の限界ってあるんでしょうか?

よくある買い物籠のイメージは、商品の識別番号と個数を籠(セッション)に保持しておくと思うんですが、
実データを入力させてそのままセッションに入れて持ち歩くような動作を考えてます
0597nobode2006/08/01(火) 16:19:50ID:???
>>596
ハッシュファイルベースのセッション管理なら
そのセッションファイルを保存しているディスク量がセッションの限界じゃないかな?
あとセッション変数にドンドン代入していくとioの時に一時的にRAM喰うからRAMは多めにつんどいたらいいと思うよ。
スワップすると重くなるよ。レンタルとかだったら基本的に限界は割り当てられたPHPのメモリ使用量じゃないかな。
ハンドラ使ってDBとかに保存するのも基本的にWEB層の制限を受けると思うよ。
ケースバイケースだけど。
間違ってたらごめんまだPHP初めて3日目だから...
0598nobodyさん2006/08/01(火) 17:38:12ID:???
>>596
php.iniでの設定値次第だと思うけど、
PHPの配列等で確保できるメモリには上限がある(デフォルトで8MBだっけ?)
から、それを超えるような分量になってくるとメモリ確保エラーを起こすと思う。
0599nobodyさん2006/08/01(火) 19:11:32ID:???
>>588
それができなかったらデータベース使う意味ないじゃん・・・・
いったい何のためにデータベース使ってるんだ
0600nobodyさん2006/08/01(火) 20:18:01ID:CFVLtjTH
$str='123';
$str='1234';
$str='12345';
という変数があったとして、
これらの長さを一意にしたいのです。
(指定した文字列になるまで指定した文字で埋めたい)

strlenで長さ読んで、足りない分の文字を足せばいいのはわかっているのですが、もし関数になっていたら知りたいな、と思ってカキコしました。

そんな楽する関数はありますか? or 自分で関数作っちゃった方が良いですか?
0601nobodyさん2006/08/01(火) 20:18:46ID:???
すみません。
× (指定した文字列になるまで指定した文字で埋めたい)
○ (指定した文字数になるまで指定した文字で埋めたい)
0602nobodyさん2006/08/01(火) 20:27:13ID:???
>>600
sprintf
0603nobodyさん2006/08/01(火) 20:32:17ID:???
>>600
str_padってのもある。空白以外で埋めたいならこちら。
0604nobodyさん2006/08/01(火) 20:35:20ID:???
>>602
sprintfで対処できました。
http://jp.php.net/sprintf
ありがとうございました。
0605nobodyさん2006/08/01(火) 20:39:21ID:???
>>603
こっちのほうが指定が簡単ですね。
処理速度計算して早いほう使ってみようと思います。

ありがとうございました。
0606nobodyさん2006/08/01(火) 22:20:27ID:???
>>605
専用に実装された関数と、もっと汎用性のある関数じゃ比較しようも無いと思うがなぁ。
0607nobodyさん2006/08/01(火) 22:29:09ID:???
Cだとprintfって結構重かったようなきがする
0608nobodyさん2006/08/02(水) 00:01:08ID:???
文字列処理について質問があり・・・というか、ボスケテ!!

例えとして「sample.txt」というファイルには下記のようなテキストが入っています。
2ch;giko;nanasi;\n
test;test;test;\n

これを

$list=$file('../data/sample.txt');
foreach($list as $line){
$array_list_tmp[]=$line;
$n++;

}

で、1行ずつ$array_tmp[]にいれまして

$findme=';';
for($x=$begin;$x<=$end-($end-$n);$x++){
$mystring=$array_list_tmp[$x];
for($y=0;$y<=2;$y++){
$setcount=strpos($mystring,$findme);
$array_list[$x][$y]=substr($mystring,0,$setcount-1);
$mystring=substr($mystring,$setcount);
}
}


で';'が最初に見つかる桁までの値を取得して、';'は必要ないので値-1で必要な文字列だけを取得したいんですが。
変数の中身が1回目のループ分しか取得できず、あとは''になってます。
馬鹿にもわかりやすく易しい文字列処理の方法がありましたご教授して欲しいであります。
0609nobodyさん2006/08/02(水) 00:06:55ID:???
>>608

$fdata = str_replace("\n", '', file_get_contents('../data/sample.txt'));
$mystrings = explode(';', $fdata);

何がしたいのかは知らんが。
0610nobodyさん2006/08/02(水) 00:40:54ID:???
>>608
最初のforeachって意味あるの?
0611nobodyさん2006/08/02(水) 00:46:27ID:???
ノートパソコンでもローカルサーバー作れましたっけ?
0612nobodyさん2006/08/02(水) 00:47:29ID:???
>>608
お前のやりたい事はは>>609の二行で網羅できる。
もうちょっと落ち着いてみろ
0613nobodyさん2006/08/02(水) 01:00:43ID:???
>>611
そりゃできるけど。
■ このスレッドは過去ログ倉庫に格納されています