【PHP】質問スレッドpart32【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/01/03(火) 17:18:20ID:???【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。
過去スレ、関連リンク、FAQ等>>2-10辺り
0449nobodyさん
2006/01/25(水) 21:22:40ID:???0450440
2006/01/25(水) 23:49:12ID:???$newview = '720';//ニュー表示何時間? しない時は0
$newlogo = '<font color="#FF6699">new</font><br>'; //最新記事マークタグ
if($newview == 0 || ($newview*3600+$stmp) < $nowtim) $newlogo = "" ;
$nn.="[{$tim}] $newlogo$com<hr size=1>";//最新記事
----------
こんな感じのがあるんですが、
<font color="#FF6699">new</font> の部分を
<a href="bbs/bbs_opinion.cgi">感想掲示板</a>に入れ替えれば良さそうなんですが、
実際にどうやって取り込んでページに反映させられるのかわかりません..。
ご示唆のほどお願いします。
0452409
2006/01/26(木) 03:21:42ID:???ありがと。
早速使ってみ…と思ったのですが、
[:XXXX:]は、何パターンもあり、
preg_replace、preg_replace…と数分だけ書くと言う手もあるのかもしれませんが、
検索文字列に設定できません。
ブログで絵文字を使うような感じにしたかったのですが、
どのようにしたらいいのでしょうか。
0453nobodyさん
2006/01/26(木) 04:39:17ID:AR4L/VZ9ttp://php.s3.to/script.php
ここのカウンタを応用すれば?
0455nobodyさん
2006/01/26(木) 05:15:39ID:???0456nobodyさん
2006/01/26(木) 10:44:28ID:???[:XXXX:]にある程度固有のルールは無いのか?英数字しか使えないとか。
$str = preg_replace('/\[:\w+?:\]/e', 'emoji($1)', $str);
みたいな感じで[:〜:]を最短マッチで関数に引き渡せばできそうな気がするんだが。
0457456
2006/01/26(木) 10:45:49ID:???$str = preg_replace('/\[:(\w+?):\]/e', 'emoji($1)', $str);
0458nobodyさん
2006/01/26(木) 11:16:55ID:???方法を思いつきません、どなたかアイデア・助言や分かりやすいサンプルソースのある場所を教え頂けないでしょうか。
再帰的な処理を行う方法がとんと浮かびません。
0459nobodyさん
2006/01/26(木) 11:23:50ID:8dMtV3IMやった事のある人はいますか?
いろいろ探したのですが、タグ情報の読み書きしか見当たりませんでした。
mp3の前と後ろをカットして中を結合して前と後ろを付け直すとかやってみたのですが、、、
mp3ってどうすればよいのでしょう。
0460nobodyさん
2006/01/26(木) 11:28:02ID:???その手の掲示板のソースを参考にすればいいんじゃまいか
>>459
ググればいくらでも見つかるわけで。つかphpで扱うな。
0461nobodyさん
2006/01/26(木) 11:29:29ID:RHnTs72Chttp://news19.2ch.net/test/read.cgi/news/1138239761/
実装してくれる奇特な方はいませんか?
0462nobodyさん
2006/01/26(木) 14:30:13ID:8dMtV3IMPHPでなくてもいいのですが、>>460 さんは何で扱いますか?
0463nobodyさん
2006/01/26(木) 15:04:41ID:???0464nobodyさん
2006/01/26(木) 15:13:38ID:8dMtV3IMキャッシュが残っていて結合されたファイルが鳴らなかっただけで、
単純に足せば鳴りました。
0465nobodyさん
2006/01/26(木) 15:56:54ID:IB58kw5L行うにはどうすればいいのでしょうか?
0466nobodyさん
2006/01/26(木) 16:03:50ID:P2h/kQrX例えば
$str='aaa';
という変数があり、
$wrap='aabcdeffaaabfue';
という変数の中から$strを大小区別無し検索するには
eregi($str,$wrap)
で動作しますが、
同じように
preg_match('/'.$str.'/i',$wrap);
でも動作するのでしょうか?
0467nobodyさん
2006/01/26(木) 16:06:46ID:P2h/kQrX正常に動きました
0470nobodyさん
2006/01/26(木) 16:25:54ID:???まぁ、頑張ってソース嫁
0471nobodyさん
2006/01/26(木) 16:27:22ID:???掲示板だとして、一つの案だが
記事ごとにクラスを作る
個々の記事には独立した ID を振っておく
親配列、子配列をメンバ変数に持ち、直接の親、直接の子の ID が
ここに収まる
表示の起点となる ID を指定して、そこから例えば親は直接の親だけ
子はエンドレスで取得して表示
なんて風にやってみるって手はあるかな。
もっと効率のいい方法があると思うけど。
0472nobodyさん
2006/01/26(木) 17:25:26ID:ZWELklYb1.php
$str = "<a name=test1></a>";
2.php
<a href="1.php#test1?mode=asdf">
仕様とかでしょうか?それとも可能?
0474nobodyさん
2006/01/26(木) 17:39:20ID:???初心者向けのインストールガイドとかしてくれるサイトです。。。
WIKIを使いたいんですけどよくわかんなくて困ってます…。
0477nobodyさん
2006/01/26(木) 17:49:20ID:???・wikiを使いたい→wikiスレ
・レンタル鯖に設置したいけど方法が分からない→レンタル鯖板
・PHPのインストール方法が分からない→分からない点を書きアドバイスを求める (質問の内容によっては 自宅サーバ板)
PHPのインストールってのが何を指すのかよく分からない。
まぁ、wikiを設置したいけどやり方が分からないんだとエスパー
って事でこの板のwikiスレに行って、設置先の名前、設置するwikiの名前、それと分からないポイントを書けば誰か教えてくれるかもよ
0478472
2006/01/26(木) 17:50:14ID:ZWELklYbマジサンクス。マジ俺アホス。一発で解決しました。50円あげるお^^
つ �I�I�I�I
0480nobodyさん
2006/01/26(木) 18:11:44ID:???名前[ ]
内容[ ]
【プレビュー】【送信】
という表示だとして、プレビューのボタンを押した時に別ウィンドウが開いて
入力した内容が確認できる。
送信のボタンを押すとそのまま送信できる。
というのを考えているのですが、プレビューも送信もどちらもsubmitボタンとした場合、
formのaction先には1つのファイルしか指定できないわけで、どうすればいいか
迷っています。(プレビューと送信完了のページは別ファイル)
説明が下手ですみませんが、何かアドバイスをいただければと思います。
0484480
2006/01/26(木) 19:01:55ID:???その「Submitの名前」というのは、例えば以下のような事ですか?
<form action="test.php" method="POST">
ソース
<input type="submit" name="preview" value="プレビュー">
<input type="submit" name="entry"value="送信">
で、test.phpでifでsubmitからのnameを判別して
プレビュー用ならpreview.phpをincludeして、送信用ならentry.phpをinculdeするような。
>>482
確認はプレビューでするので、実際は登録されていない事になります。
0485nobodyさん
2006/01/26(木) 20:09:10ID:???オレだったら、hiddenだらけの別formを用意して、
プレビューはjavascriptで上記フォームを介して行い、
送信は普通にsubmitするかな。
もちろん、javascript offの環境ではプレビューできないけどw
0487nobodyさん
2006/01/26(木) 22:50:15ID:XYYPwXMirand(0,50);
で0以上50以下が出力されるのはわかったのですが
srand(初期値);
のsrandの使い方がいまいちわかりません。
0から50までの乱数を出す場合はsrandの初期値はどのように
設定すればいいのでしょうか?
0488nobodyさん
2006/01/26(木) 23:07:36ID:???とりあえずわかったのが、UserAgentで携帯端末情報を読み取るまではわかったが、それから先が一向に進まぬ
教えて下さい。大先生方!!
0489nobodyさん
2006/01/26(木) 23:39:02ID:???http://www.php.net/srand
> 注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。これは、この処理が自動的に行われるためです。
つまり4.2.0以降のバージョンではsrandを書かなくていい。
ちなみに以前のバージョンでsrandを書く場合引数にはtime()などのランダムになりやすい値を与える。
つーかsrand(time())にするべし。
>>488
そこまでわかったのにどうして先に進めないのさ?
ifとかswitchとかincludeとかファイル入出力とかDBとか適当に組み合わせるだけだよ。
0490nobodyさん
2006/01/27(金) 02:21:59ID:???0493nobodyさん
2006/01/27(金) 14:07:06ID:lsupN3afついでにPHPも改造してください。
0494nobodyさん
2006/01/27(金) 17:14:49ID:zienXgmO$test = 'hoo';
echo $test['bar'];
で「h」が出力されるようになったのですが、
($test['bar'] が $test[0] と評価されている?)
こういう仕様に変わったんでしょうか?
0495nobodyさん
2006/01/27(金) 17:40:06ID:???PHP4.0.1辺りから色々試したけど同じように「h」が出力されたぞ。
「存在しない添字は0として評価される」なんて公式な仕様はないと思うので、
仕様ではないと思うけど。
0496nobodyさん
2006/01/27(金) 17:55:11ID:???連想配列に添字でアクセスしようとしてるんじゃなくて、オフセットを指定して
文字列にアクセスしようとしてて、string "bar" が int 0 にキャストされてるだけ。
0497nobodyさん
2006/01/27(金) 18:52:21ID:???php 4、MySQL、PostgreSQL 対応で。
0498nobodyさん
2006/01/27(金) 19:15:36ID:???存在しない添え字っつーか、それは文字列型への桁位置アクセスだからな。
配列とは違って数値しかありえない。よって[0]扱いが正しいと思われ。
0499nobodyさん
2006/01/27(金) 19:18:59ID:???できれば $hoge{0} と書いた方がいい。
0501nobodyさん
2006/01/27(金) 21:51:27ID:???http://www.php.net/manual/ja/language.types.string.php
文字列への文字単位のアクセスと修正
http://www.zend.com/engine2/ZendEngine-2.0.pdf
String offset syntax
0503nobodyさん
2006/01/28(土) 03:53:00ID:vNPPStC0どのくらいユニークなのかな?
ミリ秒を種にしているとのことだけど
無限にユニークであり続けることなんて不可能だし。
UNIXタイムの限界くらいまでユニーク?
0504nobodyさん
2006/01/28(土) 05:24:49ID:???uniqidは現在時刻をマイクロ秒単位(マニュアルにはミリ秒って書いてあるけど)でそのまま16進表記しただけなので、2038年(だったっけ?)のいつだかまでの間に1マイクロ秒のズレもなく同時にuniqidを呼び出さない限りは確実にユニーク。
echo uniqid(), "\n", uniqid();ってやっても多分ちょっとはズレる。
ちなみにUNIXタイムスタンプの最大値0x7FFFFFFF(約20億)に100万を掛けた数の膨大なuniqidが存在し得る。
以下はソースのext/standard/uniqid.cから一部抜粋
> /* The max value usec can have is 0xF423F, so we use only five hex
> * digits for usecs.
> */
> if (more_entropy) {
> spprintf(&uniqid, 0, "%s%08x%05x%.8f", prefix, sec, usec, php_combined_lcg(TSRMLS_C) * 10);
> } else {
> spprintf(&uniqid, 0, "%s%08x%05x", prefix, sec, usec);
> }
spprintfっていったい何だ?w
0506nobodyさん
2006/01/28(土) 12:17:41ID:???0507nobodyさん
2006/01/29(日) 02:15:45ID:???0508nobodyさん
2006/01/29(日) 04:31:28ID:???0509nobodyさん
2006/01/29(日) 10:01:30ID:???0510nobodyさん
2006/01/29(日) 15:22:58ID:mSKJalfC例>>
Aaa
The bbb
Ccc
これが思いつきそうで思いつかない……orz
0511nobodyさん
2006/01/29(日) 15:31:15ID:???ス レ 違 い
0512nobodyさん
2006/01/29(日) 15:33:53ID:???0513510
2006/01/29(日) 15:43:09ID:mSKJalfCこれってDBの話なの?
DBからは素直にとってきて、配列にして、PHP側でさあどうソートするかって話だと思ったんですが……。
0514nobodyさん
2006/01/29(日) 16:30:19ID:???>これってDBの話なの?
「DBに格納したデータを」って書いてるじゃないか。
文面通りに解釈すると「DBに格納したデータを特殊な条件付でソートし結果を受け取りたい」と読める。
だから、「どこがPHPの質問なの?」と突っ込まれたわけよ。
まぁ、usort でも使ってユーザ関数でソートしたら?
0516nobodyさん
2006/01/29(日) 16:49:08ID:???0518nobodyさん
2006/01/29(日) 23:54:56ID:???どういった方法があるでしょうか?
0520518
2006/01/30(月) 00:12:30ID:???1を2にするのは簡単ですが、
01を02にするのはかなり面倒そうですので。
0522nobodyさん
2006/01/30(月) 00:17:49ID:???計算自体は桁考えずに行って、最後に表示するときだけ
printf("%03d", $cnt); と3桁化すりゃいーよ。
0523518
2006/01/30(月) 00:27:03ID:???0524nobodyさん
NGNG自分で「短い文字でもちゃんとSJIS→JISに変換できるように!!」
と入れた処理なんですが、後から見て何をやっているか
わからなくなってしまいました。
/* 文字数が少ないとエンコードに失敗するんだとさ。*/
$message = "あいうえお眉幅ABC".$message;
$body = mb_convert_encoding( $message , "JIS", "EUC-JP,UTF-8,SJIS,ASCII,JIS");
$body = substr ( $body , 3 + 14 + 3 + 3 );
�@なぜ「"あいうえお眉幅"」ではなくて「"あいうえお眉幅ABC"」なのか
�A最後の「3 + 14 + 3 + 3」の詳細
解読できる人がいたら助けてください。。。。
0525nobodyさん
2006/01/30(月) 01:57:49ID:???0526nobodyさん
NGNGありがとう。
0527nobodyさん
2006/01/30(月) 09:39:33ID:JutOeLmXnullを渡せたらまだよかったんだけど。
もしくはデフォルト引数にnewを書けたらまだよかったかも。
タイプヒンティングせずに関数内でinstanceofしか方法はないかな?
よりよい型の制限方法あったら教えてください。
0529nobodyさん
2006/01/30(月) 18:52:22ID:???何かご存じの方、ご教授願います。
・実メモリ 128Mbytes
・DLファイル 1Gbytes
・直アクセスはしない
・DLダイアログは直ぐに出る
・https経由
DL部分のコードは下記の通りです。
ob_start(),ob_end_flush();を組み合わせても×でした。
$fp=fopen($FNAME,"rb");
while(!feof($fp)){
echo fread($fp,4096);
flush();
}
環境
apache 1.3.33
php4-4.4.1_1
0530529
2006/01/30(月) 19:28:04ID:???これから切り分けて、後で報告します。 お騒がせしました。
test.php
<?
$file="test.zip";
header("Content-Type: application/octet-stream;");
header("Content-Disposition: attachment; filename=$file");
ob_end_flush();
readfile("data/$file");
?>
0531nobodyさん
2006/01/30(月) 20:56:32ID:EJ05v1/FPOSTでwavのバイナリデータが飛ばされてくるシステムでデータを保存するのに
pack関数を使用して保存すれば良いのでは?という所まではたどり着いたのですが
どのように使用するのかがマニュアルを見たのですが今ひとつ分かりませんでした
どなたか使い方分かる方教えていただけませんか?
$data = urldecode($_POST['wavdata']);
$fp = @fopen("./data.wav","wb");
fwrite($fp, pack("[この部分がわかりません]",$data));
fclose($fp);
0532nobodyさん
2006/01/30(月) 21:31:50ID:???その前に何でそのシステムがRFC1867に基づく
ファイルアップロードを行わない(させない)のか教えてくれる?
Webブラウザ以外の特殊(といっていいのかな)なクライアントでも対応してる
場合が多いと思うけど。PHPでもアップロードのクラスがPEARにあるよ。
0533nobodyさん
2006/01/30(月) 21:46:56ID:/1xdn91h○ご教示
0534531
2006/01/30(月) 21:47:09ID:???私もシステム開発元になぜRFC1867に基づくファイルアップロード
を使用できないのか聞いたのですが、
開発元で作成したデータ保存後にFTPで送信するCGIを使用するか
もしくは自分で何とか出来るならしてください
の一点張りで結局教えてくれませんでした。
現在はつなぎとして開発元が提供しているFTPのCGIを使用していますが
とにかく遅いので自前で何とかしようと今回の書き込みとなりました。
0535nobodyさん
2006/01/30(月) 22:12:12ID:???それを読んだ限りだと、開発元が作成したのはデータ保存後FTPで送信する物であり、POSTでバイナリを送りつける妙な仕様の物ではない
つまり、その妙な物を作ったのは貴方だと受け取れるが、そうなのか?
仮にそうなら、そんな妙な仕様の物を作るのはやめて、RFC1867に基づくファイルアップロードをやってくれる物を使うべきだ
まぁ・・そもそも、遅いのはFTPするCGIが原因なのか?とか作って時間の無駄だったと気付きそうな香りが・・・。
0536nobodyさん
2006/01/30(月) 22:13:31ID:???それを標準出力(=POST)で送ってくる、とかの類じゃないの?
で、巷のお絵描き掲示板でそういう処理は実際にやってるから
ソース見てみたら参考になると思う。
参) PHP製のお絵描き掲示板 >ttp://www.punyu.net/
0537nobodyさん
2006/01/30(月) 22:16:36ID:???生のバイナリデータがそのまま送信されてくるので、
urldecodeだのpackだのは要らないです。
ヘッダで指定されたサイズで受信してそのまま保存。
なので、全然違う仕様の可能性も高いけど、それ以外に
そんな変な仕様になる理由が思いつかなかったので。
0538531
2006/01/30(月) 22:22:57ID:???開発元がPOSTでバイナリデータを送っいるといっていますので
こちらでわざわざ妙なつくりにしたということはありえません。
FTPが遅いのは流れから言っても確実です
FTPを使用した場合
CGIにデータ渡す>データをエンコード後保存>FTP接続しこちらのサーバーへ>ファイル公開
FTP使用しなかった場合
データをエンコード後保存>ファイル公開
0540452
2006/01/31(火) 00:20:15ID:+LWq5c8/>>457
亀ですんません。
[:XXXX:]は[:はーと:]と言ったように、
ひらがなで統一しようと思ってました。
でも、英数字でも問題ないです。
preg_replaceだと1個しか置換できないのかと考え、
preg_match_allで、[::]内のひらがなを抜き出し、
ループで回して該当する画像を表示させようと思ってたのですが、
>>456さんのやり方の方がいいのでしょうか。
正規表現がよくわからなくて、
調べてはみたものの、
ちぐはぐな返答かもしれません。
ごめんなさい。
---------------------------------------------------------
$text = 今日は天気[:hare:]がいい!明日は雨[:ame:]らしい。
---------------------------------------------------------
$textを表示させるときに、[:hare:]=太陽の画像、[:ame:]=傘の画像を
表示させたいのです…
0541531
2006/01/31(火) 00:50:36ID:???完全なテスト環境が家に無いので確実とはいえませんが
教えていただいたもので何とかなりそうです
みなさんありがとうございました
0542nobodyさん
2006/01/31(火) 01:21:23ID:???なんとなく、こんな感じかな?
ってか、正規表現くらい勉強しろ。”調べる”のではなく、”勉強”だ。
あと、
> preg_replaceだと1個しか置換できないのかと考え、
”考え”ではなく、試せ。せっかく >>456 が良い回答しているのに・・・。
以下、動作未確認スクリプト。
//
$text = "今日は天気[:hare:]がいい!明日は雨[:ame:]らしい。";
$text = preg_replace('/\[:(\w+?):\]/e', 'emoji($1)', $text);
function emoji($code) {
// 以下、DBに接続できていると仮定
$imageFileName = "";
$result = mysql_query("SELECT imageFileName FROM table_name WHERE emojiCode = '{$code}'");
if (mysql_num_rows($result)) {
$imageFileName = "<img src=\"".mysql_result($result , 0)."\">";
}
return $imageFileName;
}
0543nobodyさん
2006/01/31(火) 01:41:28ID:kuYyOVO4fopenとかじゃ無理だよね。
自前でサーバーにつないでhttpリクエスト書かなきゃダメ?
もしくはそういうステキなラッパーがあれば・・・
0544nobodyさん
2006/01/31(火) 01:44:59ID:???ちょっと調べてみたけど、sjisかeucだったら2バイト目にコロンと同じコード(3A)が来る文字はないから>>542の正規表現を'/\[:(.+?):\]/e'にすれば問題なくマルチバイト混在可能になるはず。
ただUTF-8の場合は2バイト目以降全てのコードがありえるらしいから : の直後に ] があると意図しない結果になるかも。
JISは終端エスケープが完全なら問題なし。
0545nobodyさん
2006/01/31(火) 01:50:48ID:b+k1eFbTできません。プログラムは以下のようにやっています。
<?php $n; $i; function fib($n){if($n==1){return 1;}else if($n==0){
return 0;}else{return fib($n-1)+fib($n-2);}}
for($i=0;$i<=20;$i++){print("fib($i)");} ?>
そして結果が、
fib(0) fib(1) fib(2)・・・fib(20)
のようになってしまい、ちゃんとした値がでません。
計算の仕方自体は間違っていないと思うのですが、functionのあたりが間違って
いるような気がしないでもありません。
echoや&をつけたりといろいろしているのですがうまくいきません。
何が違うのか、どうすればいいのかを、どうか教えて下さい。お願い致します。
0548nobodyさん
2006/01/31(火) 02:12:45ID:???print("fib($i)"); → print(fib($i));
print("fib($i)") ってのは文字列に$iの値を埋め込んで出力するって事、つまりfib()を関数として認識してない。
それと動作しないのとは関係ないけど、最初に書いてる$n; $i; は不要。$i は for($i=0; ...) で初期化されてるし、$n は使われてない。
まぁ次からは下質スレにおいで
■ このスレッドは過去ログ倉庫に格納されています