【PHP】質問スレッドpart19【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/07/16 07:12ID:KvHeypq/・新規質問の方は上げてください。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
抜けているものがあったら補足願います
0233nobodyさん
04/07/21 15:17ID:???教えてください
0234nobodyさん
04/07/21 15:18ID:/GR6B3Fpfor($i=100;$i>=0;$i--)
{
require_once("res.inc");
$text[$i]=preg_replace_callback(
"|>([0-9]+)|",
"henkan",
$text[$i]);
print($text[$i]);
}
rec.inc の中身
<?php
function henkan($matches)
{
return "<a href=#$matches[1]><P title=$text[$i]>>".$matches[1]."</P></a>".($matches[2]);
}
?>
イメージ的にはこのように レス番号文字列にカーソルを合わせるとそのレス内容が表示され、
かつクリックするとそのリンクへ飛ぶという形にしたいのですが res.incないで$text[$i]が取得できません
文頭にrequire_once("right.php");としても結果は変わりませんでした。どのようにすればright.php内の
$text[$i]が取得できますか?ご教授くださいお願いします。
0236nobodyさん
04/07/21 15:47ID:???aタグの中にpタグを包含していいのか?
どうせなら aタグにtitleを書きゃいいじゃないか。
そんで、その程度ならpreg_replaceで十分だろ。
0237nobodyさん
04/07/21 15:49ID:???Pear
http://pc5.2ch.net/test/read.cgi/php/985665522/
0238nobodyさん
04/07/21 15:49ID:???0239nobodyさん
04/07/21 16:42ID:???md5が手軽でいいかと
0241nobodyさん
04/07/21 17:10ID:???HTTPヘッダのステータスをPHPのスクリプト内部から設定したいんだけど
どうしたらよろしいのでしょうか?具体的には、STATUSを500に設定したいのですけど。
header()関数あたりになにか入れればいいのでしょうか?
0243nobodyさん
04/07/21 17:37ID:???含まれるみたいなのですが、これはPHP4の時からそうなっていた
のでしょうか?
今まで気づかなかっただけか・・・^^;。
0245nobodyさん
04/07/21 18:37ID:???0247nobodyさん
04/07/21 18:51ID:???ttp://jp.php.net/manual/ja/security.php
0248nobodyさん
04/07/21 18:55ID:???PHP4でも含まれていたはずだけど、今まで無かったのなら↓これの所為では?
ttp://jp.php.net/manual/ja/ini.sect.data-handling.php#ini.variables-order
0249nobodyさん
04/07/21 18:57ID:???つか去年はどうして出れたんですか?
0250nobodyさん
04/07/21 19:02ID:???Part2 : http://pc.2ch.net/php/kako/1003/10032/1003283567.html
Part3 : http://pc.2ch.net/php/kako/1013/10139/1013919792.html
Part4 : http://pc.2ch.net/php/kako/1022/10229/1022999539.html
Part5 : http://pc.2ch.net/php/kako/1031/10317/1031721334.html
Part6 : http://pc5.2ch.net/php/kako/1038/10389/1038988518.html
Part7 : http://pc5.2ch.net/php/kako/1044/10444/1044478561.html
Part8 : http://pc5.2ch.net/php/kako/1050/10502/1050249148.html
Part9 : http://pc5.2ch.net/php/kako/1057/10579/1057947512.html
Part10: http://pc5.2ch.net/php/kako/1064/10641/1064104114.html
part11: http://pc5.2ch.net/php/kako/1067/10676/1067635640.html
part12: http://pc5.2ch.net/test/read.cgi/php/1070639208/
part13: http://pc5.2ch.net/test/read.cgi/php/1073291978/
part14: http://pc5.2ch.net/test/read.cgi/php/1076163015/
part15: http://pc5.2ch.net/test/read.cgi/php/1078592587/
part16: http://pc5.2ch.net/test/read.cgi/php/1081267619/
part17: http://pc5.2ch.net/test/read.cgi/php/1084781699/
0252nobodyさん
04/07/21 20:29ID:???0253nobodyさん
04/07/21 20:57ID:???0255nobodyさん
04/07/22 02:00ID:???0256nobodyさん
04/07/22 02:03ID:???header("Content-Type:text/plain");
$str1 = "http://end.com/マルチバイト";
$str2 = "マルチバイトhttp://end.com/";
if( mb_ereg("^マルチバイト",$str1) ){
print("\$str1 Hit : ^マルチバイト\n");
}
if( mb_ereg("^マルチバイト",$str2) ){
print("\$str2 Hit : ^マルチバイト\n");
}
?>
/* output
$str2 Hit : ^マルチバイト
*/
0257203
04/07/22 02:29ID:???遅れましたがとんくすです。
試しにレンタルしてる鯖でこっそり試してみたら小さいファイルだったら大丈夫そうですが、
RLimitCPUなんかよりもreadfileしたファイルがサイズ制限みたいなのを受けて落ちてきませんでした。
いろんな設定があるもんだなと思いました(自分apacheの設定深くはしらんので…)。
汎用性のあるものを作りたいので諦めました。また他の方法考えてみます。ありがとでした。
0258nobodyさん
04/07/22 03:07ID:???ttp://www5a.biglobe.ne.jp/~inano/jancode.html
というのは見つけたのですが、45/49で始まるもの以外も使うので
汎用的に使うにはちょっと難しい感じです。
どこかに転がっていないでしょうか?
0259nobodyさん
04/07/22 04:33ID:???<?
include("var.php");
include("format.php");
?>
とすればうまく表示できるんですけど
var.phpの方がいろいろ増えてvar-tarou.php、var-hanako.php、var-hiroyuki.php
みたいになった時、そのファイル名をテキストファイルvar.txtに1行ごと書いて
<?
$data = file ("var.txt");
for ($i=0;$i<3;$i++) {
include("$data[$i]");
include("format.php");
}
?>
とやったら
0260nobodyさん
04/07/22 04:36ID:???途中で送ってしまった・・・
それでこれでは間違ってるようなのですがどうすれば
var.txtに書いたファイル名を1行目から表示していけるか誰か教えてください。
あ、データベースは使えません。
0262nobodyさん
04/07/22 04:56ID:???0263234
04/07/22 05:19ID:O8WfHKX6$string = $text[$i];
$pattern = "|>([0-9]+)|";
$replacement = "<a href=#\${1} title=$text[\${1}]>>\${1}</a>";
print preg_replace($pattern, $replacement, $string);
前と同じような段階までは進むのですが title=$text[\${1}] やはり同じくこの部分で引っかかってしまいます。
エラーメッセージは
Parse error: parse error, unexpected T_CHARACTER, expecting T_STRING or T_VARIABLE or T_NUM_STRING
$textないをクオーテーション等でくくってみてもうまくいかず、アドバイスいただけたらと思います。
0264ちなみに
04/07/22 05:27ID:O8WfHKX6title=$text[10] 等書いてもその部分はコメントが出されません。
$text[10]には当然値は入っているのですが・・・
0265nobodyさん
04/07/22 06:16ID:???preg_replace_callbackを使って、コールバック関数内でglobal $text, $i;を宣言すればいい。
(元のfor文がグローバルスコープにあるのが前提だけど)
クラスを使えば変数のスコープに悩まされずに済む。
・・・それ以前にa要素のtitle属性に全文をぶち込もうという蛮勇のほうが問題と思うが。
しかもstrip_tagsもhtmlspecialcharsもかけずに。
ポップアップさせたいのならCSSとJavaScriptで対応した方がいいよ。
p2のソースとか参考にしる。
0266nobodyさん
04/07/22 08:11ID:???<?
$data = file ("var.txt");
for ($i=0;$i<3;$i++) {
include(rtrim("$data[$i]"));
include("format.php");
}
?>
>>263
$string = $text[$i];
$pattern = "|>([0-9]+)|e";
$replacement = '"<a href=\"#${1}\" title=\"" . htmlspecialchars($text[${1}]) . "\">${1}</a>"';
print preg_replace($pattern, $replacement, $string);
0267nobodyさん
04/07/22 11:32ID:???http://www.mribti.com/barcode/sample.php
バーコードのことは良くわかんない。
で、上のはブラウザ上でさくっと試せます。
あ、QR コード描きたいなぁ。と、ふと思った。
0268258
04/07/22 12:01ID:???そこも見つけてはいたんですが、JANコードに対応してないんですよ。
って、>>258で書きたいバーコード書いてませんでしたね。
JAN13 を書きたいんです。
そこだけ GD::Barcode で逃げるしかないかなぁ。ちょっと悔しいですが。
0269nobodyさん
04/07/22 12:22ID:IcVwk4jf$str = "<br />\n<br />\n<br />\n<br />\n<br />\n";
$str = mb_ereg_replace("^<br />", " <br />", $str);
print($str);
で、なんで下のようになるのよ。
<br />
<br />
<br />
<br />
<br />
本当に困ってます。お願いします。
0271nobodyさん
04/07/22 12:40ID:???こうしたいのかな。
$str = mb_ereg_replace("^<br />", " <br />", $str, "m");
それにしても、PHP マニュアルにマルチバイト正規表現のオプション説明は目立たない・・・。
0272nobodyさん
04/07/22 12:45ID:???GD使ってるなら JpGraph使えば?
ttp://www.aditus.nu/jpgraph/jpg_barcodes.php
0274軟式PHP
04/07/22 13:10ID:???0275nobodyさん
04/07/22 13:18ID:???0276nobodyさん
04/07/22 13:25ID:???緊急で困っています。
PHP4.0.6+IE6を使って開発しています。
何故か急にセッションが効かなくなりました。本当にいきなりです。
配列変数をセッションで保存しているのですが、例えば
$nm[0]〜$nm[10]まであるとして、配列に値を代入します。
$nmをセッション宣言して次のページに移動したときに
$nm[4]〜$nm[6]まで保存されてなく、他のは保存されているといった不可解な状態になっています。
$nmをモニタリングしたところ、移動元のページの最後では値は残っているけど、移動先のページの最初では
すでに値は消えているといった状態です。セッション宣言した配列変数の一部分だけ消えてしまうといった現象です。
ちなみに会社内の他のPCでは正常動作しています。自分のPCでは開発していて突然このような状態になりました。
また以前開発したモノも、その当時は正常動作していたのですが、試しにテストしてみたらそちらでもセッションが効かなく
なってしまっていました。
何か原因とかわかるでしょうか?
0277nobodyさん
04/07/22 13:31ID:???0279Imo ◆.jC7ANgFY.
04/07/22 13:46ID:???でついでにPHPAとか入ってるんじゃない?
そのときにはいったんPHPAのキャッシュを消すべし。
違ったらスルー
0280276
04/07/22 13:56ID:???試しにOPERA7でやってみたら正常に動作しました。
PHPAは入れていません。
0285nobodyさん
04/07/22 14:25ID:???!ereg(HP_BASE_URL,$_SERVER["HTTP_REFERER"])を
preg_match('/HP_BASE_URL/',$_SERVER["HTTP_REFERER"])
に書き換えようとしたのですが、preg_matchの方では定数が
上手く使えない様です。'/'.HP_BASE_URL.'/'
でもダメでした。preg_matchでは定数を利用する事が出来ない
のでしょうか?
0286269
04/07/22 14:50ID:???動きました。ああ、あなたは神です。アリガトン
>>271>>273
行頭改行に を入れたいんだよ。
でも、うちが使ってるサーバーではならなかったんだよ(;´д`)
0288nobodyさん
04/07/22 15:14ID:???0289nobodyさん
04/07/22 15:23ID:ZtAuJUSe$filepath = $save_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
$filett = $filett+$filekb;
}
これでディレクトリの中のファイル容量を計算していて、これはこれで動くのですが
その後に
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
echo "<img src=\"$filepath\">".$filekb;
}
と、画像一覧を表示させようとするとエラーがでます。
最初の構文の最後に、$save_dir->close();を入れるとエラーはでませんが
画像もでてきません。
$filenameを2度読み込んでるからでしょうか?クマった・・
0290nobodyさん
04/07/22 15:24ID:ZtAuJUSeあぁ・・間違った。。訂正です・・
while ( $filename = $save_dir->read() ) {
$filepath = $save_dir2 . $filename;
↓
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
すいません。
0293nobodyさん
04/07/22 15:58ID:???0294nobodyさん
04/07/22 16:09ID:???JpGraphが対応してるのは知らんかった。
2次元も作ったことあるけど仕様がカチッと決まってるし、
ゼロ作っちゃっても大したことないです。
決まった画像を並べて結合するだけですから。
読み取りは一般的なスキャナで図形として読み取って、
そこから補正かけて解析するのは、この手の扱いに慣れてないと
面倒かもしれん(そしてQRコードが良く出来ていることに気づく)
0295nobodyさん
04/07/22 16:09ID:???>$replacement = "<a href=#\${1} title=$text[\${1}]>>\${1}</a>";
単純にこの行で $text[\${1}] を展開しようとしているだけなんじゃ?
後方参照を展開しつつ、配列も展開するにはe修飾子を使うしかないかも。
とりあえず$text[]はサニタイズ済みだとすれば、
$string = $text[$i];
$pattern = "|>([0-9]+)|e";
$replacement = '"<a href=\"#$1\" title=\"$text[$1]\">>$1</a>"';
print preg_replace($pattern, $replacement, $string);
こうかな?つーかこれ、結構危険な気が・・・
0296nobodyさん
04/07/22 16:12ID:???$hoge = "a:\yamada";
$hogeを"a:\suzuki"に置換したい場合どうしたらいいでしょうか?
\が入っているとereg_replaceでうまく置換できませんでした
よろしくお願いします
0297296
04/07/22 16:19ID:???0298nobodyさん
04/07/22 16:48ID:???$regtimeが他の書き込みと重複する事ってない?
0300nobodyさん
04/07/22 16:57ID:???2ちゃんみたいにアクセス数が多けりゃカブりまくりだけど
お前の所みたいに月に1件くらいの書き込みなら心配ないんじゃないの?
0301nobodyさん
04/07/22 17:05ID:???0303nobodyさん
04/07/22 17:33ID:ZtAuJUSe_| ̄|円
0304nobodyさん
04/07/22 17:52ID:???PHP 側から見たファイルパスと Web 側から見たファイルパスは違うので画像が表示されないのは当然。
HTML で出力されたソースを見て画像の正しい位置を出力するようにしてみたら?
0305nobodyさん
04/07/22 17:58ID:ZtAuJUSeえーと、下の画像一覧表示の構文だけなら問題無く表示できます。
エラーの内容からすると、2回目のwhile ( $filename = $save_dir->read() ) {
が呼び出された時に呼び出しエラーがでてるみたいです・・
0306289
04/07/22 18:03ID:ZtAuJUSewhile ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
$filett = $filett+$filekb; //ファイル容量計算
}
〜この間にhtmlが入って〜
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
echo "<img src=\"$filepath\">".$filekb; //画像一覧
}
と。readを2回行っています。
どちらか一つならエラーはでず、思惑通り表示されます。
0307298
04/07/22 18:03ID:???ここのURLにもあるでしょ
time関数が!
0308nobodyさん
04/07/22 18:24ID:???time関数とか臭い
0309Imo ◆.jC7ANgFY.
04/07/22 18:27ID:???なんとなく邪道なサンプルをあげてみるテスト
while ( $filenames[] = $up_dir->read() ) {}
foreach ($filenames as $filename) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
$filett = $filett+$filekb; //ファイル容量計算
}
〜この間にhtmlが入って〜
foreach ($filenames as $filename) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
echo "<img src=\"$filepath\">".$filekb; //画像一覧
}
0310nobodyさん
04/07/22 18:29ID:???それなら $up_dir->close() をファイル容量計算の後に閉じないと $up_dir のポインタが最初に戻らないのでは?
filesize() あたりでエラーになっているとか。エラー内容を書けば分かると思うけど。
ディレクトリのファイル容量を知りたいだけだったら disk_free_space() という関数もあるけどね。
0312289
04/07/22 18:53ID:ZtAuJUSeすいません。。2回目リードの前に$up_dir=dir("img/")と再宣言してやったら、うまく行きました。
なぜ直ったかよくわかりませんが。。もっかいじっくり見てみます。
>>304
>>309
>>310
皆さん有難う御座いました。
disk_free_space() 楽そうな関数あるじゃん!って思って使ってみたら
わけわからん数字がでてきたので、詳しく調べてまた使ってみます^^;
0313nobodyさん
04/07/22 19:17ID:???phpの前に日本語のコミュニケーション技法を勉強する必要があるんじゃないの?w
msec単位ならまだしもsec単位で書き込みが重複するかどうかなんて、
ちょっと考えれば解りそうなもんだが
一意性を求めたいなら他に方法があるからマニュアル引いて自分で調べろや
0314nobodyさん
04/07/22 22:06ID:???0315nobodyさん
04/07/22 23:42ID:7BmR+CsIinput.php
<?php
echo <<<UPF
<form action="output.php" method="post">
<input type="file" name="upfile"><br>
<input type="submit" value="POST">
</form>
UPF;
?>
output.php
<?php
$outfile = $_POST['upfile'];
$file = @file($output);
print_r($file);
?>
じゃ、だめなの?
0316nobodyさん
04/07/22 23:54ID:???〃∩ ∧_∧
⊂⌒( ´・ω・)くぜんぶマニュアルに書いてあったでつ
`ヽ_っ⌒/⌒c
http://www.php.net/manual/ja/features.file-upload.php
0317nobodyさん
04/07/23 00:00ID:NhG7RjUM0319nobodyさん
04/07/23 13:07ID:???いらっしゃいましたら、教えて頂けると助かりますm(_ _)m
0320nobodyさん
04/07/23 13:13ID:???0321nobodyさん
04/07/23 13:39ID:???pack(), unpack() を調べてごらん。mp3 はそれで編集した。
WAV のフォーマットを聞きたいのであれば Google で。
0323nobodyさん
04/07/23 15:23ID:kRHOf0Jq0325nobodyさん
04/07/23 16:46ID:???1つの Apache に PHP4 と PHP5 をインストールして共存に成功したこと
はないけど、Apache を PHP4 用と PHP5 用に 2つ別ディレクトリに
インストールして別の Port 番号で PHP4 用と PHP5 用の Apache を同時に
起動させることは可能。
0327nobodyさん
04/07/24 06:05ID:4AWYwTYsindex.phpに
readfile("./$QUERY_STRING.txt");
って書いて、index.php?aを開いたらa.txtの内容が出てくる。
index.php?bを開いたらb.txtの内容が出てくる。
ここまでは分かったんですが、例えば、index.phpを開いた時に
txtファイルの一覧&リンクを出てくるようにして、クリックしたら、
一覧があった場所にa.txtの内容を表示するようにするにはどうしたらいいんでしょうか?
リンク一覧を作ってその後にreadfile("./$QUERY_STRING.txt");を書いてみたんですが
下にずらずら繋がっちゃって見た目がよくないんです。
親切な方教えてください。お願いします。
0328nobodyさん
04/07/24 06:12ID:???0329nobodyさん
04/07/24 07:05ID:???if (empty($QUERY_STRING)) echo リンク一覧;
とかそういうこと?
033017
04/07/24 09:53ID:???を
perg_replace("/((https?://|ftp://)([0-9a-z:_?./~%;()=+#-]|&)+)/","<a href='\\1' target='_blank'>\\1</a>",$sql['body']);
に置き換え(eregをpreg)たらUnknown modifierが発生するケースが出て来てしまいました
どんな文字が影響していると考えられるのでしょうか?
0331nobodyさん
04/07/24 10:18ID:???ext/pcre/php_pcre.c
マニュアルの言葉だと 内部オプション設定ってやつを処理する部分で、
内部オプションにないものを指定した時にエラーとして表示される。
どこかの「/」が邪魔してるんじゃないの?
つーか、オイラなら正規表現でエラーが出たら一文字ずつ削って動作確認するけどな
0332nobodyさん
04/07/24 10:32ID:???if($_POST['b1']){
//エラーチェック
if(empty($_POST["main"])){
echo "何も本文が入力されていません";
exit;
//データベース書き込み
}else{
$keyday = strftime("%Y/%m/%d %H:%M:%S",time()+3600);
if(empty($_POST["name"])){
$keyname = "無題";
}else{
$keyname = $_POST["name"];
}
$keymain = $_POST["main"];
$result = pg_query("select * from kadaidb;");
$rows = pg_numrows($result);
$rows++;
$radio = '<input type="radio" name="radio" value="$rows">';
pg_query("insert into kadaidb values ('$radio','$rows','$keyday','$keyname','$keymain');");
pg_freeresult($result);
print <<<END
<H2>送信しました</H2><BR><BR>
<H3>管理番号</H3> $rows<BR><BR>
<H3>日付</H3> $keyday<BR><BR>
<H3>タイトル</H3> $keyname<BR><BR>
<H3>本文</H3><BR> $keymain
END;
}
}
ラジオボタンのvalueに$rowsが反映されるようにしたいのですが,どうすればいいのでしょうか。
■ このスレッドは過去ログ倉庫に格納されています