【PHP】質問スレッドpart18【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/06/14 14:36ID:???・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
抜けているものがあったら補足願います
0370カポコン
04/06/26 02:39ID:???0371nobodyさん
04/06/26 06:20ID:???あー、やっぱりそうなっちゃいますか。
配布したいので、やっぱり
imgタグからphpを呼び出してgetで渡した方が
良さそうですね。
ありがとうござい真下。
0372nobodyさん
04/06/26 11:58ID:???メルマガの広告などによく使われる、
http://www.xxxx.com/xxx.php?id=xxxx
のような、リダイレクトするphpで、なおかつ http://www.xxxx.com/
のrefererを相手のServerにきちんと受け渡すタイプのを探しています。
リダイレクト先のListは別ファイルで用意する形です。
0374nobodyさん
04/06/26 14:04ID:???おたずねしたいことかあります。
Cpanelってありますよね??
これをPHPなどでプログラムを作り、自動登録システムって可能ですか??
0377nobodyさん
04/06/26 15:14ID:???可能でしょうか?
ttp://www.hoge.com/image.gif
のようなURLから画像のサイズを取得するということです。
お願いします。
0379nobodyさん
04/06/26 16:09ID:???画像"ファイル"のサイズならHTTPヘッダで取れるけど、
画像のサイズはURLからは無理。URLのファイル(画像)を
取得して、PHPの画像系の関数で画像のサイズを取得する。
0380nobodyさん
04/06/26 16:12ID:???WARNING: couldn't load the socket extension
って怒られるんだわ
けど PHP Ver 4.3.4で Sockets Support: enabled は確認済み
対処法plz
0384nobodyさん
04/06/26 18:38ID:???IRCSmart.phpを見てみると、extension_loaded('sockets') に失敗して
なおかつ dl('socket')にも失敗した時にそのメッセージが出るから、
get_loaded_extensions でほんとにロードされてるか確認して、、、
ん、dl("ファイル名")じゃなかったっけ?
0385nobodyさん
04/06/26 19:06ID:???フォーロthx.
結論は Socket.phpが apache->PHPからの呼び出しではロードされ,
コンソールから $php hogeでは呼び出されないといったものでした.
つまらないミスを調べさせてしまって正直すまんかった.ありがとう >384
0386nobodyさん
04/06/26 19:34ID:plBi49aM後ろレコードからデータを読む場合はどうすればよいのでしょうか?
0387nobodyさん
04/06/26 19:49ID:???キモイやり方がお好みならmysql_data_seek()を使えばいいけど、
真っ当なやり方ならSQLの段階でorder byを設定すりゃいい。
つーかSQLの勉強をやり直した方がi..うわなにすんだやめr
0388nobodyさん
04/06/26 21:51ID:jyZGtADG変換コードってありませんか?
0389nobodyさん
04/06/27 16:28ID:???知らない。ただjcode(LEではない方)弄って
GB2312とbig5の変換表を入れてやれば作れると思う。
あれ、中身は変換式/テーブルそのものだから。
CJKを参考にすればOK
0390nobodyさん
04/06/27 21:31ID:???確率も指定出来て、一日に一名のみ当選するようにしたいのですが、
可能でしょうか
0391nobodyさん
04/06/27 21:57ID:???可能です。
> 確率を指定
$rate = 0.5
> 一日に一名のみ当選
lottery.dat みたいなファイルを作る。
日付のデータが入ってる。
1. lottery.dat を読む
2. 現在の日付を調べる
3. もし lottery.dat に入っていた日付と、現在の日付が違っていたら
3-1. 抽選を行う(srand(), rand())
3-2. 現在の日付を lottery.dat に書く
もし日付が同じだったら、抽選を行わない
0392nobodyさん
04/06/27 22:02ID:???C の構造体のデータをバイナリとして持ってきて、
その構造体にアクセスしたいのです。
読み出しは unpack() を使うとできるのですが、
書きこみは pack() 関数を使うと、「一部のデータだけ書き換え」することができません。
一部のデータだけ書き換えする上手い方法はないでしょうか。
(何万件ものデータにアクセスするため、できるだけ速いアクセスがいいのですが)
なにかご存知の方、ご教授ください。
0393392
04/06/27 22:34ID:???substr_replace() を使うことにしました。
データの該当部分を pack() した後、
substr_replace() で該当部分を書き換える、という具合です。
0394nobodyさん
04/06/27 23:17ID:zkNM2hBA改行が反映されないのですが、
どうすれば改行されるようになるでしょうか?
0395nobodyさん
04/06/27 23:30ID:Ba+8mIiM「能\」や「表\」のように、語尾に\記号がついてしまいます。
これを回避する方法はないでしょうか?
ご存知の方教えてください、宜しくお願いしますm(__)m
0398394(馬鹿)
04/06/28 00:05ID:???テキストファイルを表示するときに、
HTMLとして表示されているため、改行が行われないんだ。
当たり前だな。で、どうすれば改行されるんだ?
preタグ使うと横スクロールするようになるんでこれではちと困るのだが。
0399nobodyさん
04/06/28 00:06ID:bkEAVbgzmail関数で、DBに登録されているメールアドレスに
送信済みのフラグをたてながら一件づつ送信するプログラムなのですが
ループが早すぎてサーバーが処理しきれないのは問題があります。
ループの間隔をおくのも確実とは言えません。
過負荷にならない程度にメールを配信するには
どういった方法が挙げられるでしょうか?ご教授ください。
0400nobodyさん
04/06/28 00:09ID:???反応してる奴と2人でさしつさされつ完結していて欲しい。
0403nobodyさん
04/06/28 08:52ID:???よろしくお願いします。
0404nobodyさん
04/06/28 09:28ID:WEBa9e2hexec();
system();
passthru();
shell_exec();
``;
0405nobodyさん
04/06/28 12:30ID:???('A`)
0406nobodyさん
04/06/28 12:39ID:???0407nobodyさん
04/06/28 12:50ID:WEBa9e2h0409nobodyさん
04/06/28 13:39ID:???定義されていないテンプレート変数、例えば {$hoge} に assign が無ければ、
以前はスキップしてくれたのですが、バージョンアップ後は
>FATAL .. Undefined index hoge
とエラーを吐いています。
いちいち {if isset($hoge)} と囲うのも鬱陶しく、どう対処すべきかな〜、と。
# Smarty の設定かと思いマニュアル見直しましたが適当な設定は見あたらず。
# $smarty->undefined = NULL とかも試しましたが変化無しでした。
0410nobodyさん
04/06/28 14:53ID:???%に挟まれた文字列(%test%)から%を取り除き、
それをキーとする要素を連想配列から取り出して出力したいのですが、何も表示されません。
もしよろしかったら、教えていただけると幸いです。
<?php
$template = "%test%";
//%に挟まれた文字列にマッチ
$pattern = "/(\%)(.+)(\%)/";
//置換用配列
$replacement = array("test" => "キタ━━━━ヽ(゚∀゚ )ノ━━━━!!!!");
//このままだと、%を取り除いた文字列を表示
//"$2"の部分を$replacement['$2']や$replacement[$2]、$replacement['\\2']などとしてみましたが、ダメでした。
echo(preg_replace($pattern, "$2", $template));
?>
#一応全角スペースでインデントしました。よろしくお願いします。
0411410
04/06/28 14:58ID:???OS: Windows XP SP2 RC2
Server: Apache 2.0.49
PHP: 5.0 RC3
モジュールとして動かしております。
0412nobodyさん
04/06/28 15:00ID:???0413nobodyさん
04/06/28 15:02ID:???ソース斜め見しただけでレスしてました。
0414nobodyさん
04/06/28 15:06ID:???そうなんですが、htmlファイルでテンプレートを作って、%で囲まれた文字列を置換して出力したいんですよ…。
キーもtestだけではないので、
str_replace("%test%", $replacement["test"], $template);
などとしてもやはり複数行になってしまいますよね。
できることなら一行にまとめたいのですが…。
0415409
04/06/28 15:06ID:???マニュアルよく読むべし。
<?php
$template = '%test%';
$patterns[] = '/(\%)(.+)(\%)/';
$replacements[] = 'キタ━━━━ヽ(゚∀゚ )ノ━━━━!!!!';
echo(preg_replace($patterns, $replacements, $template));
?>
テンプレートを探してるなら自作するよりどこかから持ってきた方がいいよ。
regex 型のテンプレートならそれなりに普及しているのが幾つかあるし。
http://smarty.php.net/
http://pear.php.net/packages.php?catpid=10&catname=HTML
0417409
04/06/28 15:07ID:???流れたら pear スレの方に逝ってきまつ、、
0418nobodyさん
04/06/28 15:09ID:???0421nobodyさん
04/06/28 15:22ID:???0422415
04/06/28 15:23ID:???0423nobodyさん
04/06/28 15:25ID:???0425nobodyさん
04/06/28 15:54ID:???0427nobodyさん
04/06/28 16:14ID:???⊂⌒( ´・ω・)くpaserは何語表記なんだろう...
`ヽ_っ⌒/⌒c
0430nobodyさん
04/06/28 17:32ID:???誰かが投票するたびにYYYYMMDD-HHIISS.txtという形式でファイルを生成して書き込むという仕組みでした。
この場合1秒間に複数の投票があったら対応できないので明らかにまずいんじゃないかと(排他処理でなんとか
なるかもしれませんが)と思います。
素直に1ファイルに追加書き込みしていった方が後で集計するのも楽だと思いますが。
0431nobodyさん
04/06/28 17:58ID:???スクリプトを見てみないと分からないけど上書き処理で前のデータが消えるんだろうね
それより閲覧する場合は投稿分のファイルを全部オープンする気だろうか・・・
ログを生成して保存してるのかなぁ
1つのスクリプト内でMYSQLに頻繁にアクセスする場合、その都度
mysql_connect('localhost:3306','id','pass');
と、みなさんは書いてますか?
classやfunction内でmysql_connectを書いてるのが美しくない気がしてならない
0432nobodyさん
04/06/28 18:42ID:???美しい美しくない以前にリソースの無駄遣いのような...
グローバルスコープで$my = mysql_connect();して
関数やクラス内でglobal $my;するとかではだめっすか?
PEARのDB_DataObjectのソースが参考になるかと。
0433nobodyさん
04/06/28 18:43ID:???書き込もうと思ったファイルが存在したら、乱数秒待機させるとか。
>MYSQLに頻繁にアクセスする場合
単一コネクションで済む場合は、普通コネクションは使いまわしだわな。
コネクション張るのにコスト(PHPの場合は少なくて済んでるけど)が必要だから。
0434nobodyさん
04/06/28 19:17ID:l4cOKm4nindex.php
<?php require("hogehoge.inc");?>
<? echo $hogehoge_1;?>
hogehoge.inc
$hogehoge_1=123456
とすれば123456と返ってくると思うのですが。
これを
$_GETを使って
ttp://127.0.0.1/index.php?main=1 もしくは
ttp://127.0.0.1/index.php?main=2
index.php
<?php require("hogehoge.inc");?>
<? echo $hogehoge_$_GET['main'];?>
hogehoge.inc
$hogehoge_1=123456
$hogehoge_2=78910
などで呼び出せないものでしょうか。
<? echo $hogehoge_$_GET['main'];?>を
<? echo $hogehoge_{$_GET['main']};?>
にした場合、夢だったのか呼び出せたように思えたのですが、、(2日ほど寝ていないので・・)
わかる方よろしくお願いします。
0435nobodyさん
04/06/28 19:38ID:???今日はもうやめるか
0436nobodyさん
04/06/28 19:52ID:???俺個人的には可変変数は気持ち悪い。。。
0437nobodyさん
04/06/28 20:02ID:???うぉ〜〜ありがとうございます!
できました!(ノ_・。)
とてもうれしいです!
今夜はゆっくり眠れそうですw
<(_ _)>
0438nobodyさん
04/06/28 20:18ID:???文字化けするようになったのだが、
どんな原因が考えられますか?
昔は全然なかったような気がするだけどなぁ、なんでやろ。
0440nobodyさん
04/06/28 21:37ID:O2HF8evSphp.iniのSMTPの内容をそのサーバ名に指定してもメールが送れません。
mb_send_mailでもmailでも戻り値はTrueです。
また、Webサーバからはちゃんとtelnetでそのメールサーバにつないで
メールを送ることはできていますがPHPで送信しても
ログにも残っていないんでデータが渡せていないっぽいんですが・・
他にも設定しないといけないところがあるのでしょうか?
0441nobodyさん
04/06/28 22:03ID:???マニュアルのmail関数のあたりに詳しく書いてあるのだけど、
Windows版の場合はメールサーバに渡してくれて、
それ以外の場合はsendmailプログラム(not サーバ)に渡してくれる。
鯖OSを書いてないから勝手にirixだと仮定して話を進めるけど、
mail()がtrueになってるってことは、Webサーバのメールプログラム(ややこしいな..)を
呼び出していてそこで溜まってるんじゃないかな。
で、解決方法はと言うと、Webサーバのメールサーバ設定をきちんとするか、
メールサーバとsocket通信をするか、くらいかな。
0442nobodyさん
04/06/29 00:49ID:zFB2Z8eM<?php
setcookie("bbs_name",$_POST['name'],(time()+60*60*24*30),"","",0);
?>
<html><head><title>掲示板</title></head><body>
<form action='このファイル自身' method='post'>
<input type='hidden' name='action' value='regist'>
名前<input type='text' name='name' value="<?php echo $_COOKIE['bbs_name'] ?>">
<?php
if ($_POST['flags'] == 'return') {
echo "<input type=submit value=[" . $_POST['return'] . "]に返信>\n";
echo "<input type=hidden name=ress value=" . $_POST['code'] . ">\n";
} else {
echo "<input type=submit value=書き込み/更新> <input type=reset value=リセット>\n";
}
?>
以下、記述が続きます・・・
上記の記述でサブミットボタンを押し、1回目に更新した時には、
名前入力欄に前回入力した内容が表示されるのですが、
2回目に更新をかけると、全て消えてしまうのです。
いったい何が原因なのか、わかる方、ご教授下さい。
0443nobodyさん
04/06/29 01:40ID:???submitボタンを押して更新しているから大丈夫っぽだが、
前後の取り合いが判らんので、念のため、
if($_POST['name']) {
setcookie("bbs_name",$_POST['name'],(time()+60*60*24*30),"","",0);
}
ってするとどうなる。
#どうなる。って聞きながら今日はもう寝る。l
0444nobodyさん
04/06/29 01:51ID:2uVjJIh2--------------------------------------------------------------------------------
送信側でりんごとみかんとどっちか選ぶ選択肢があって、
処理側でりんごとみかんをどっち選んだかの結果を表示し、
かごの中にはりんごは今 個です
かごの中にはみかんは今 個です
と表示させたいのですが、どうしてもできないんです。。
セッション関数、formタグのinputを使ってもいいみたいなんですが・。・・
0445nobodyさん
04/06/29 01:55ID:???/ 冫、) / 冫、)
/ ` / / ` /
/:::::::::::\ /::::::::::::;\
//:::::::::::: l | //´|::::::::::::l |
//|::::::::::::/| | >>444 // /::::::::::::/| |
U |::::::::::/. U ↓ U |::::::::::/ U
|::::||::| | | /⌒ヽ/ |::::||::|
| / | | | / ´_ゝ`) | / | |
// .| | / __ ,/ // | |
// | | | / | | // | |
U U U U U U
0446nobodyさん
04/06/29 02:00ID:2uVjJIh2<head>
<title>課題</title>
</head>
<body>
<center><h2>ワークシート4</h2></center>
<form action = "worksheet4.php"method = "POST">
<center>
お名前<input type="text" name="username">
<br>
メールアドレス<input type="text" name="mail">
<br>
郵便番号<input type="text" name="bango">
<br>
住所<input type="text" name="zyusyo">
<input type="submit" name="submit" value="登録!">
<br>
<input type = "hidden" name ="product" value="Apple"><br>
<input type = "submit" value = "かごに入れる">
<input type = "hidden" name ="product" value="Orange"><br>
<input type = "submit" value = "かごに入れる">
</center>
</form>
</body>
</html>
というふうにしたんですが、オレンジとりんごを選択するタグって何をつかうんですが?
0447nobodyさん
04/06/29 02:08ID:9Mhdwhm6fgetcsvには文字化けするという問題があります・・・。
fgetcsvに相当する関数を自作すれば良いと言われましたが、
そんな事できませんです。
だれか fgetcsvに相当する関数作った事ある、知っている
という方 教えて下さい。
0448nobodyさん
04/06/29 02:14ID:???へぇ、初耳。
> fgetcsvに相当する関数を自作すれば良いと言われました
ext じゃなくて PHP によるユーザー定義関数の自作、でしょ。
余裕で可能。
0449nobodyさん
04/06/29 02:36ID:???ereg_replace("(https?|ftp) 〜〜
上記のようにURLを判定し、文字列をリンクするよう置換しています。
これに当てはまらない場合でよく見かける直リンク避けの「ttp」から始まるものも
違う文字列に置換したいのです。
ereg_replace("(ttp) 〜〜
このようにしてしまうと上に書いた通常リンクのものと衝突してしまいますし
ereg_replace("(^ttp) 〜〜
このようにすることでそれらの問題は回避でき、望みの動作をするのですが
本文の一番最初にURLが記載されないといけないので不都合です。
例えば 「あいうえおttp://hogehoge/」 という投稿があった際にも
置換処理を行いたいのですが、いい方法はないでしょうか?
0450nobodyさん
04/06/29 02:37ID:???>fgetcsvには文字化けするという問題があります・・・。
>fgetcsvに相当する関数を自作すれば良いと言われましたが、
その話が話題になったところで回答出てるだろ。
人づてで聞いたなら、聞いた人に訊け。
0455nobodyさん
04/06/29 09:55ID:???何ができないの?プログラムを作ったことがないのか?
0.前処理(ファイルオープン、DBトランザクション開始とか)
1.1行読み込む
2.ファイルエンドまで繰り返す
3. 読み込んだバッファをカンマ(,)をセパレータにして区切る
4. (必要に応じて、フィールド数が想定したものと違っていたらerrorとする)
5. (必要に応じて、フィールド後のチェックを行う)
6. (必要に応じて、DBテーブルに格納してもいいかも)
7. 1行読み込む、2のループへ
8.後処理(ファイルクローズ、DBコミットとか)
※1、フィールドのダブルクオート(")囲みを想定している場合、3.の処理でダブルクオート(")を
取り除く処理が必要、データ中にカンマ(,)ダブルクオート(")を許す場合はさらに複雑
※2、フィールド中に改行を許す場合は2.7.のと読み込み処理にも工夫が必要
0456nobodyさん
04/06/29 13:12ID:???> ※1、フィールドのダブルクオート(")囲みを想定している場合、3.の処理でダブルクオート(")を
> 取り除く処理が必要、データ中にカンマ(,)ダブルクオート(")を許す場合はさらに複雑
> ※2、フィールド中に改行を許す場合は2.7.のと読み込み処理にも工夫が必要
この条件が満たされないと、CSVを読み込めるとは言えないでしょう。
0459nobodyさん
04/06/29 14:38ID:???ところが、用途が限定されていれば、1行読んでカンマで切り分けるだけすむ場合も良くあるよ。
必要ないなら、わざわざ汎用的なCSV読み込みプログラムを作る必要もない。
どっちにしろ>>457の言う通り、大した事じゃない。
0460nobodyさん
04/06/29 16:17ID:???引っ張ってきたのかと思ってスルーしてたよ
0462nobodyさん
04/06/29 16:45ID:8D9V5eyp+という文字が2回以上続いた場合、+一個にしたい。
+++→+
++→+
+→そのまま
0463nobodyさん
04/06/29 16:49ID:???質問の仕方もどうにかしてくれ。
0464nobodyさん
04/06/29 17:10ID:???Apache1.3.28とPHP4.3.7でオフラインでやっているのですが、html内に記述したPHPが実行されなくて
困ってます。
PHP単体だと問題なく動作します。
例えば、
//----------------
<?php print "テスト"; ?>
//----------------
これで **.phpとすれば問題なく表示されますが、
//----------------
<html><body>
<?php print "テスト"; ?>
</body></html>
//----------------
これだと何も表示されません。
何が原因として考えられますか?
インストールには下記のサイトを参考にしました。
ttp://www.dream-seed.com/server/php_apache.html
0466464
04/06/29 17:18ID:???書き忘れてました。
下の方は **.htmlです。
0467nobodyさん
04/06/29 17:27ID:???■ このスレッドは過去ログ倉庫に格納されています