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

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

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

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

【前スレ】
 【PHP】下らねぇ質問はここに書き込みやがれ 30
 http://pc8.2ch.net/test/read.cgi/php/1159979905/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しない)
・ サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0011nobodyさん2006/10/25(水) 10:34:39ID:rZkuwLJp
2ゲット⊂(゚Д゚⊂⌒`つ≡
0012名無しさん@お腹いっぱい。2006/10/25(水) 11:44:27ID:J6B8Hktu
htmlの文章を"。"が3つ出てくるごとに改行したいんですが、どうもうまく
いきません。

for($i=1; i<=30; i++){
 if(ereg("。","str.html"){
   if($i/3==1){

それで、fwriteで\nを書き込むようなことを試みたんですが・・
よろしければ、鮮やかな処理をお見せいただきたい。
0013nobodyさん2006/10/25(水) 11:54:23ID:???
括弧もとじてないし。なんでコードがちゅうと半端なの?
0014nobodyさん2006/10/25(水) 12:04:21ID:???
>>12
よくわからんけどこういうことじゃないの?
$html = str_replace('。。。','。。。<br/>',$html);
0015nobodyさん2006/10/25(水) 12:12:24ID:???
文字列。文字列。文字列。<BR>
文字列。文字列。文字列。<BR>
文字列。文字列。文字列。<BR>
0016nobodyさん2006/10/25(水) 12:16:43ID:???
$html = str_replace('。。。','。。。<br/>',file_get_contents(str.html));
echo $html;
0017nobodyさん2006/10/25(水) 12:24:00ID:???
$v[]="abc";

echo $v{0};

この場合の{}ってどういう意味ですか?
0018122006/10/25(水) 12:34:59ID:J6B8Hktu
>13
関係があるところを書くと、こんなです。
$bunsyou=fopen("str.html","r+");
$kaigyou =fread($bunsyou,filesize("str.html"));
for($i=1; i<=30; i++){
 if(ereg("。","str.html"){
  if($i/3==1){
fwrite("str.html","。\n");
}
}
}
fclose($bunsyou);
>14
すいません。言葉が足りませんでした。
例えば、
○○○○○○○○○○○○○○。○○○○○○○○
○○○○○○○○○○○○。○○○○○○○○○○
○○。○○○○○○○○○○○○○○○○○○○。
といった文章があったとして、一度も改行されずに文章が記述されて
いるのは読みにくいので、"。"が3度出てきたら、そこで改行したい
ということです。
0019nobodyさん2006/10/25(水) 12:39:49ID:???
>> if(ereg("。","str.html"){
正規表現をばかにしすぎ
0020名無しさん2006/10/25(水) 12:57:12ID:gy1NzvJV
申し込みフォームを作成して、申込者に確認メールを
送信する仕組みを作りました。

相手が通常のメーラーなら問題ないのですが、hotmailなどの
フリーメールを使っている場合、文字化けしていることが
あるようです。

どうすれば相手がフリーメールでも文字化けしないでメール
送信ができるようになるでしょうか?

メール送信には、mb_send_mail関数を使っています。

この第4引数になんらかのヘッダ情報を付与すればいいのかな
とも思っていますが、どうすればいいのかよくわかりません。

よろしくお願いいたします。

Windows2000Server
PHP4.4.0
Webサーバ及びSMTPサーバはIISを利用。
0021nobodyさん2006/10/25(水) 13:10:05ID:???
配列を","で区切って出力してくれる関数はありませんか?
ちょうどarrayで入力するときみたいに。
0022nobodyさん2006/10/25(水) 13:19:30ID:???
質問者はIDをだせ。
0023nobodyさん2006/10/25(水) 13:21:28ID:???
>>17
桁指定
0024nobodyさん2006/10/25(水) 13:22:00ID:???
>>21
explode
0025nobodyさん2006/10/25(水) 13:26:19ID:snVEf27m
すいません 訪問者がサイト内でクリックしたURLを表示したいのですが、
どんな関数がありますか?
0026242006/10/25(水) 13:27:44ID:???
違った。勘違いした。
改めて>>21
var_export
0027nobodyさん2006/10/25(水) 13:28:17ID:???
>>25
ない
0028nobodyさん2006/10/25(水) 13:29:15ID:???
>>18
まだいるか?
0029nobodyさん2006/10/25(水) 13:38:03ID:???
携帯からメールで送られてきた時、添付禁止できないようにPHPで設定できないでしょうか?
0030nobodyさん2006/10/25(水) 13:39:33ID:???
できるかバカs
0031nobodyさん2006/10/25(水) 13:42:12ID:snVEf27m
>>27

そうですか・・・
PHPサイトでクリック履歴を表示してくれるサイトがあったのでついできるのかと
0032nobodyさん2006/10/25(水) 13:49:05ID:???
>>31
質問の仕方が悪いからでしょ。そんな「関数」はない。
そんな仕組みは作れるがな。
0033172006/10/25(水) 13:50:16ID:???
>>23
具体的にお願いできますでしょうか?

連想配列でも使えるようなのですが・・
0034nobodyさん2006/10/25(水) 13:50:30ID:snVEf27m
>>32
アイデアだけでもいただけますか? 
0035nobodyさん2006/10/25(水) 13:52:10ID:???
>>34
GETとアクセス解析
0036nobodyさん2006/10/25(水) 13:54:07ID:???
>>34
各リンク先にプログラムを仕込んで呼び出されるごとにセッションに記録していく。
0037nobodyさん2006/10/25(水) 13:55:07ID:???
>>33
$str = "abcdefg";
echo $str{3};
結果 d

連想配列で{}を使うのはPHPじゃなくPerlだろ。
0038nobodyさん2006/10/25(水) 14:04:24ID:???
GPLで配布されたソースを改造して二次配布したいのですが、
GPLの理念として、金銭を得るために使用しなければ作者に断りなくしてもいいのですよね?
0039nobodyさん2006/10/25(水) 14:04:43ID:snVEf27m
いろんな方法があるのですね。
でも、ちょっとオイラでは・・・ むずかしそうです
0040nobodyさん2006/10/25(水) 14:07:43ID:???
>>37
普通に配列要素を示すのに[]の代わりに{}を使っても動作するっぽい。
何かの互換のため?でも多分、推奨はされないから使わない方がいいよ >17
0041172006/10/25(水) 14:34:08ID:???
>>40
ありがとうございました。

そういう使い方をしていたソースがあったので特別な意味があるのかなと思っていました。
0042nobodyさん2006/10/25(水) 15:35:03ID:???
メンバ変数とかコンストラクタとかについて質問なんですけど、
(PHP5風に書きます)

class Example {
 :private $example = "hoge";
}
とするのと、
class Example {
 private $example;
 function __constructor() {
  $this->example = "hoge";
 }
}

この2つの違いは何でしょうか?
両方とも変数を初期化してるわけではないのですか?
0043nobodyさん2006/10/25(水) 15:38:52ID:???
>>42
2つとも変数を初期化してるだけです。
変数宣言で直接初期化する場合は式が書けないなどいくつかの制限が出ます。
逆にコンストラクタで初期化する場合、extendしたクラスでは親クラスのコンストラクタが
呼び出されなくなる場合があるため、設計に注意が必要です。
0044nobodyさん2006/10/25(水) 15:43:13ID:???
だから質問者はIDをだしなさい。
違う質問を並べてる同一人物か?
0045182006/10/25(水) 16:32:53ID:J6B8Hktu
>>28
何でございましょう?
0046nobodyさん2006/10/25(水) 16:33:12ID:???
>>26
ありがとうございます
0047nobodyさん2006/10/25(水) 16:34:01ID:???
>>18
解決したの?
0048182006/10/25(水) 16:37:21ID:J6B8Hktu
時が解決してくれるわけはないけど、ちょっと放置ですね。
ついでなんですけど、さっきのことで1ついいですか?
指定した文字が文章中に何回出てくるかカウントする関数
またはそれ以外の方法ってありますか?
0049nobodyさん2006/10/25(水) 16:48:21ID:???
>>20
とりあえずmb_languageが適切に設定されてるか確認しる

>>38
ライセンスくらい読めよ(´・ω・`)
0050nobodyさん2006/10/25(水) 16:51:06ID:???
>>18
書いてみた。つかってくれ。
配列を使うからforではなくforeachにしてみた。
つ[ソースコード]

$text = "あああ。いいい。ううう。えええ。おおお。かかか。ききき。くくく。";

$a = explode("。",$text);

$i=0;
foreach($a as $v){

if ($i>1) {
echo $v."。<br>";
$i=0;
} else {
echo $v."。";
$i++;
}
}
0051502006/10/25(水) 16:53:39ID:???
>>48
$count = count(配列が入っている変数);
echo $count;
0052nobodyさん2006/10/25(水) 16:54:05ID:???
PHP5のプログラマと、PHP4のみのプログラマの人数はどれくらい違いますか?
0053軟式PHP2006/10/25(水) 16:56:36ID:???
>>12
3つ出てくるごとなら
if($i/3==1){
ではなくて、
if(!($i%3)){
じゃないのかな。
文字をカウントするのはsubstr_count()。

>>20
どこが文字化けしてるん?サブジェクトだとは思うけど。
本文は文字化けしてないよね。
0054502006/10/25(水) 16:59:09ID:???
>>18


>>50のソースは一番最後の「。」が表示されるバグがあるので
$a = explode("。",$text);

のあとに正規表現で最後の「。」をとる記述をかけば問題はないでしょう。
一番最後の文字を削ればいいだけなのであとは調べてください。
0055nobodyさん2006/10/25(水) 17:00:03ID:???
>>52

両方できて当たり前だろが
0056nobodyさん2006/10/25(水) 17:05:00ID:???
>>52
結構意味不明なんだけど、PHP5でさらに拡張された部分を
まだ勉強したことないプログラマ、って解釈でいいの?
それだと結構いそう。
もっとも、必要になったら3日でマスターできる内容なので
現場の環境が変わってないならわざわざ勉強する必要も感じないが。
0057182006/10/25(水) 17:07:01ID:J6B8Hktu
ご教示ありがとうございます。
早速トライします。
0058nobodyさん2006/10/25(水) 17:20:42ID:???
>>42
インスタンスを1つしか作らないなら>>43の言ってる事だけ気をつければok。
たくさん作るなら
$var1 = 1;
$var2 = 1;
と
$var1 = $var2 = 1;
の違いについて調べれば答えは出てくると思う。
0059292006/10/25(水) 17:20:59ID:9Xs/4YIO
画像に添付禁止処理をするにはどうすればいいのでしょうか?
当方PHPにて画像を取得、それを添付禁止処理して表示としたいのです。
宜しくお願いします
0060nobodyさん2006/10/25(水) 17:24:01ID:???
>>59
添付禁止ってどういう状態??
0061軟式PHP2006/10/25(水) 17:26:36ID:???
>>59
ちょっと文章が分かりづらいんだが・・・。
画像が添付されたメールを受信して、PHPでそれを解析して画像を取得。
その取得した画像をサイトに載せる際に、閲覧ユーザーがその画像をダウンロードして
他の人に配れないように添付禁止にしたいってこと?
0062292006/10/25(水) 17:33:19ID:9Xs/4YIO
>>60-61さん
レスありがとうございます
携帯のメール添付を出来なくするということです。
auだとHTMLで保存できないように出来ますが、DoCoMoは添付禁止にするしかないんです
0063nobodyさん2006/10/25(水) 17:35:46ID:???
>>62
着メロのコピー禁止は見たことあるけど、画像でもそんなことできるんだっけ。
PHPでやる方法以前にDocomoの仕組みが分からん。どっかに説明ない?
0064軟式PHP2006/10/25(水) 17:42:14ID:???
>>62
俺が前やったやり方だけど、ImageMagickでオプションに「-comment copy="NO"」をつけて再変換したよ。
PNGの場合は、ImageMagickだと出来なかったんで、HDRチャンク、tExtチャンクを取得してバイナリ直接弄ってコメント埋め込んだよ。
Docomoだから関係はないと思うけど。
0065292006/10/25(水) 17:53:02ID:9Xs/4YIO
>>63さん
DoCoMoの技術者向けサイトおいておきます
ttp://www.nttdocomo.co.jp/service/imode/make/

軟式PHPさん
ImageMagickはPerlの時少しいじった程度なのでできるかなぁ^^;
GDでは無理でしょうか?
0066軟式PHP2006/10/25(水) 18:14:14ID:???
>>65
GDじゃないけど、海外のPHPモジュール使ったやり方のサイトを見つけた。
「kddi_copyright PHP GD」でググって一番初めにひっかかるやつとか参考になると思う。
「The PHP Metadata Toolkit」っていうやつを使うみたい。サンプルらしきものも載ってるんで参考になるんじゃないかな。
0067nobodyさん2006/10/25(水) 18:29:57ID:lNHbLMUd?2BP(0)
mb_send_mailでメールを携帯(FOMA)に送信した場合、
題名が全角9文字以降から文字化けするのですが、
対策法はありますか?
0068nobodyさん2006/10/25(水) 20:46:22ID:bFjR6zW3
POSTて受け取ったデータを表示するとき、
htmlspecialcharsとstripslashesを両方やるべきなんですか?
0069nobodyさん2006/10/25(水) 21:24:51ID:???
>>68
どういう表示のさせ方をするかにもよるがhtmlspecialcharsは大抵必須。
stripslashesはmagic_quotes_gpcがONになってる場合のみ必要。
しかしそもそもmagic_quotes_gpc自体があまりONにすべきではない。
だがそのような低レベルな質問をする人はこれをONにしておいた方がいいだろう。
0070nobodyさん2006/10/25(水) 21:41:19ID:bFjR6zW3
magic_quotes_gpcってなんでおすすめできないんですか?
0071nobodyさん2006/10/25(水) 22:05:37ID:???

検索条件から、商品一覧を表示する処理を作っているんですが、
WEBアプリケーションの本を読んだところ、一度商品一覧を全部取得してセッションにつめこんで、
ページビューごとに、件数で絞って表示させていたんですが。

普通はセッションいれませんよね?
検索結果のURL直リンで表示できなくなってしまうし。

どうなん?
0072nobodyさん2006/10/25(水) 22:29:15ID:???
>>71
なんだ、その腐った本は。

まあ商品数が極端に少ないならそれもアリかもしれないけど、
普通はそんな無駄なことしないわな。
っていうかセッション・ファイルにいちいち記録し直してたらDBの意味ないし。
0073Name Not Found2006/10/25(水) 22:34:21ID:????2BP(0)
>>71
ショッピングモール等の規模が大きくて商品を絞り込んでいく場合に有効
テンポラリファイルに書き出す処理を自前で実装するのと同じで
セッションに丸投げするか自分でコードを書くかの違い

規模が小さい場合、インデックスを作成して毎回検索しなおす方手もある
適材適所
0074nobodyさん2006/10/25(水) 22:57:11ID:???
>>70
余計なとこまで全部エスケープ入れちゃうから。
結局、エスケープ不要な箇所を判断していちいち外す必要が出るんだが、
それができる人なら最初から必要な箇所だけエスケープした方が早くて、
性能的にもそっちの方が速かったりして、何の意味があるんだか分からん機能。

まー、ものすごく単純なプログラムで何も考えずに作るんであれば有効。
0075nobodyさん2006/10/25(水) 22:58:30ID:???
>>73
てんぷらファイルはちょっとくらいサイズでかくても困らないが、
それを丸ごとセッション配列に格納してたら性能定価しないか?
0076nobodyさん2006/10/25(水) 23:16:01ID:???
>>74
なるほど、ありがとうございます。
ちょっと行き詰ったのでラーメン食べてきます。
0077Name Not Found2006/10/25(水) 23:45:08ID:????2BP(0)
>>75
ちょっと落ち着いて考えてみた
実際に比べたわけじゃないけど
テンポラリの方がよさげ

0078nobodyさん2006/10/26(木) 00:20:58ID:fW8Q3JdK
foreach関数のエラーを表示したくないのですが
どこに@をつければいいんですか?

foreach ($rss->items as $item ) {

@foreachでは無理でした
0079nobodyさん2006/10/26(木) 00:26:02ID:5k/S84KJ
前スレにて、質問をさせていただいた者です。

現在、返信が出来る掲示板を作成しているのですが、
返信記事の投稿番号に1をプラスして表示できないのです。

つまり、
親記事:1
子記事1:1
子記事2:1
子記事3:1

といった感じです。

一応ソースです。

数を増やす部分:http://source.is.land.to/s/q.phps
全体(無駄多):http://source.is.land.to/s/all.phps

記事が記録されているファイルを読み込む
最後の要素取り出す
その要素を配列にする
番号の要素に1をプラス

$num に代入

といった感じです。
0080Name Not Found2006/10/26(木) 00:28:49ID:????2BP(0)
ググレ
0081nobodyさん2006/10/26(木) 00:29:16ID:???
>>78
foreachは関数じゃないと思います。
0082Name Not Found2006/10/26(木) 00:30:39ID:????2BP(0)
>>80 は >>78 宛て
0083Name Not Found2006/10/26(木) 00:32:58ID:????2BP(0)
>>79
ちゃんとソース見て無いけど
カウントアップする時、整数としてキャストしてます?
0084nobodyさん2006/10/26(木) 00:33:04ID:???
>>78
is_array()で事前チェック。
0085nobodyさん2006/10/26(木) 00:44:26ID:???
型変換して配列にしてしまえ
0086nobodyさん2006/10/26(木) 01:07:50ID:???
俺もキャストして
foreach ((array)@$rss->items as $item)
だな。
$rss->itemsが確実にissetな状態なら@はつけなくていいけど。
0087782006/10/26(木) 01:08:27ID:???
どうすりゃいいの
0088782006/10/26(木) 01:12:27ID:???
>>86
ありがとう出来ました。

他のやつも適当にサンクス
0089nobodyさん2006/10/26(木) 01:16:37ID:???
ここのスレはいい人ばかりで大好きです。
ありがとう。
0090nobodyさん2006/10/26(木) 01:20:33ID:???
>>89
氏ね
0091nobodyさん2006/10/26(木) 01:39:40ID:???
>>79
$num = ($for_num_lines[0] + 1);//それに1をプラスします
じゃなくて
$num = ($for_num_lines + 1);//それに1をプラスします
じゃないの?
0092nobodyさん2006/10/26(木) 02:12:15ID:5k/S84KJ
回答ありがとうございます。

>>83
キャストですか・・・
うーん。やってないですorz
やってみます。

>>91
$for_num_linesはたたたたたたぶん配列だと思うんですよよよよ。
0093nobodyさん2006/10/26(木) 02:22:14ID:???
>>92
$next_lines = explode("\t",$end_1);//それを分割して配列にしまいます
$for_num_lines = array_splice($next_lines,-5,1);//最後から5番目の要素(最後の$num)をとりだします。
これで配列のわけがあるかw
0094nobodyさん2006/10/26(木) 02:24:15ID:???
>>93
どうして$for_num_linesが配列だと思ったのか、話はそこからだ
0095942006/10/26(木) 02:24:48ID:???
安価間違えた

>>92な。
0096nobodyさん2006/10/26(木) 02:28:41ID:???
>>79の内容は見てないけど、>>93見た限りでは$for_num_linesは配列ジャマイカ?
0097nobodyさん2006/10/26(木) 02:40:10ID:???
俺もそう思う。
まー、普通こんな場面でarray_splice()使うやついないけどな。
0098nobodyさん2006/10/26(木) 02:43:43ID:???
>>79
とりあえず読んでみたけど、そもそも+1した$numってのは
どこの表示で使われてるの?そこが分からんかった。
0099422006/10/26(木) 05:01:08ID:???
>>43 >>58
レス遅れてすみません。
わかりやすい説明どうもありがとうございました。
設計に注意して書きたいと思います。
0100nobodyさん2006/10/26(木) 07:26:45ID:???
>>93
array_spliceの戻り値はarrayだよ
まあでも配列の要素を取り出したいなら素直に添え字指定して
$num = $next_lines[1] + 1;
とかの方がいいと思うが
>>98
$data = $for_num."\t".$num."\t".$name."\t".$bun."\t".$pass."\t".$host."\n";
に使われているようだ。
0101nobodyさん2006/10/26(木) 07:49:51ID:???
PHPでコマンドラインから
キー入力を待ってその値を受け取り、計算して表示
みたいなことはできるのでしょうか?
C言語のscanfみたいなやつです。
0102nobodyさん2006/10/26(木) 08:14:07ID:???
<?php
$stdin = fopen('php://stdin', 'r');
?>

0103nobodyさん2006/10/26(木) 08:31:18ID:ZtENe/Qs
たまにサイトで見かける、
hogehoge.php?hogehoge=hogehogehoge
みたいなやつはSwitch文で作っているのでしょうか?
0104nobodyさん2006/10/26(木) 08:35:37ID:???
下のシフトジスコードの文字列を削除もしくは置換したいので
PHPで下の文字コードがあった場合に反応をさせたいのですが
環境はEUCで統一されています。この場合どのように書けばいいんでしょうか?

0x8740〜0x879F
0xED40〜0xEEFC
0xFA40〜0xFC4B
0xF040〜0xF9FC
0105nobodyさん2006/10/26(木) 08:52:32ID:dpAXN0uK
PHPでテンプレートを使って動的ページを生成してる時に、ファイルの更新日を
意図的に近日に変更したいんだけど、それって、headerでLast-Modifiedを出せば
いいですかね?

なんでそういうことがしたいかというと、検索エンジン(具体的にはGoogle)に引っかかり
やすくしたいからなんですが
(ファイルの更新が頻繁に行われていると、再取得しによく来るとからしい)

0106nobodyさん2006/10/26(木) 09:14:16ID:???
>>102
CLIだったら定数のSTDINが使えるよ。

>>101
fscanfで。
0107nobodyさん2006/10/26(木) 09:56:41ID:???
>>105
実際に、htmlファイルを頻繁に更新してみてから言ってくれるかな。
0108nobodyさん2006/10/26(木) 09:59:58ID:???
>>103
はい、意味わかんね

>>104
正規表現でやったら?
つーかmb_convert_encodingでよさそうな気もするけど。

>>105
Last-modified以前にPragma: no-cacheとかExpiresをつけてたら常に更新されていると見なされるってことはないの?
検索エンジンがどうしてるのか知らないけど。
0109nobodyさん2006/10/26(木) 10:14:41ID:???
include、require文について質問なんですが、
out of dynamic memory in yy_create_buffer() というエラーがでたんですが、

#a.php
<?
include("b.php");
$a = "HELLO";
echo $b;
?>

#b.php
<?php
include("a,php");
$b = "WORLD";
echo $a;
?>

もしかして、相互のファイルにincludeした場合は無限ループするんですか?
0110nobodyさん2006/10/26(木) 10:24:17ID:???
>>109
無限ループする。
悪いことは言わないから、include_onceかrequire_onceにしとけ。
(つーかphpってbisonのエラーをそのまま垂れ流すんだな。初めて知った。)
■ このスレッドは過去ログ倉庫に格納されています