【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
抜けているものがあったら補足願います
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が反映されるようにしたいのですが,どうすればいいのでしょうか。
0333nobodyさん
04/07/24 10:51ID:???$rowsが変数として展開されずに そのままの文字列になってるってことかい?
文字列の中に変数を置いた時に ' と " では扱いが異なってくる。
〜 value="'.$rows.'">'; にでもすりゃェェんでないの?
0334nobodyさん
04/07/24 11:03ID:???なりました。ありがとうございます。
$radio = "<input type=\"radio\" name=\"radio\" value=\"$rows\">";
でいいじゃん。
つーかこれだと管理番号かぶるからちょっと見直した方がよくない?
0336nobodyさん
04/07/24 11:16ID:???if($_POST['del']){
$keydel = $_POST['radio'];
pg_query("delete from kadaidb where num=$keydel;");
}
を実行するようにすればいいかなっと思ったのですが,うまく動作しないみたいです…
0337nobodyさん
04/07/24 11:24ID:???Perlコーディングスレからのパクリだけど、
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
未だに$_GET $_POST等を使用するメリットって何ですか?
みんなよく使ってるみたいだけど。参考↓
http://php.s3.to/man/language.variables.predefined.html
http://php.s3.to/man/function.import-request-variables.html
0340nobodyさん
04/07/24 11:32ID:???335さんに対して答えてるはずだったのですが,読み直してみたら,答えになっていませんね。
んもう,試行錯誤してたら昼・・・少し寝てからまた頑張ってみます。
スクリプト書いてたらテンパル事も
よくあるから気にしない。
336の部分はパッと見特に問題はないかと
0343Imo ◆.jC7ANgFY.
04/07/24 12:05ID:???それは$_REQUESTを使うべきではといいたいのですか?
COOKIEと重なるから私は嫌うのですがねぇ
import_request_variablesで展開すべきだといいたいのですか?
グローバル変数が勝手に埋められるのはあまり・・・
それとも$HTTP_GET_VARSを使うべきではといいたいのですか?
変数名が長いからあまり・・・
はたまた$_SERVERから必死に分解すべきだといいたいのですか?
perlと同じことしないとだめなんて・・・
これらと違うのなら何ですか?
0344550 ◆JirmzAivjs
04/07/24 12:25ID:???フムフム、つまり
$_POST,$GET,$_COOKIE ローカルで個別に参照
$_REQUEST ローカルで全部参照したい時
$HTTP_GET_VARS 使わない
$_SERVER PHPの意味が無い
import_request_variables 引き回したい時
でおk?
0345nobodyさん
04/07/24 12:39ID:???>>336?
もっと根本的なところでアレなのは諦めるとして、フォームでは
$cbox = "<input type=\"checkbox\" name=\"delete[]\" value=\"$rows\" />";
として、削除するコードは
if (isset($_POST['delete']) && is_array($_POST['delete']) && count($_POST['delete']) > 0) {
$keys = array_map('intval', $_POST['delete']);
$keys = array_uniquie($keys);
$key = implode(', ', $keys);
$query = "DELETE FROM ktaidb WHERE num IN ($key);";
$result = @pg_query($query);
/* エラーチェック省略 */
}
とした方が良いと思われ。(各関数はマニュアルで調べるべし)
>>332を見る限りではnum列をINTEGER型で定義してると思うんだけど、SERIAL型の方がいい。
あとね、いきなりDBを操作するコードを書くんじゃなしに
そのつど変数をvar_dump()して期待通りになってるかチェックしていったほうがいいよ。
>>◆JirmzAivj
何もかもだめぽ。
あなたに言われる筋合いは無い
0348nobodyさん
04/07/24 15:16ID:???細かいご指摘ありがとうございました。
削除コードの部分はなんとなく理解できました。
今までphpPgAdminでいちいちSQL文打って確認していましたが,var_dump()の方が数倍楽ですね。
結局寝損ねましたので,またがんばってみますm(_ _)m
0349nobodyさん
04/07/24 15:45ID:???よく分かっていないのだが、register_globalsはoffで使った方が初心者には良いってことか?
しかし、
http://php.s3.to/man/language.variables.predefined.html
これを読むと、さらに分からなくなる。誰か解説して。
0350nobodyさん
04/07/24 16:04ID:???ttp://shu.sub.jp/php/tips/1.php
0351nobodyさん
04/07/24 16:13ID:???ttp://www.sound-uz.jp/php/tips/security.html
Googleって便利だね。
0352nobodyさん
04/07/24 17:35ID:???"00012"の"0"の部分を削除して
"12"だけを取り出したいのですが、どうしてもわかりません。
substrで取り出すにも"12"の部分の桁は変化するので・・・。
よろしくお願いします。
0354nobodyさん
04/07/24 18:22ID:???0355nobodyさん
04/07/24 19:46ID:???未だにregister_globals=On前提のスクリプト書いてる香具師はマジヤバイ。
0357nobodyさん
04/07/24 20:19ID:???0358nobodyさん
04/07/24 20:26ID:???session_registerを使っているのもやばいな
>>357
マニュアル嫁
ttp://jp.php.net/manual/ja/ini.sect.data-handling.php#ini.register-globals
0359nobodyさん
04/07/24 23:38ID:rcqw39Y8たまにそういう表示してるサイトを見かけるんで、できるようなんですが。
0360nobodyさん
04/07/25 00:32ID:???0361263
04/07/25 03:17ID:ZfezmSNL教えていただいた方法で実現できました。だたこういった2chなどの匿名の掲示板と違い無記名ではない掲示板ですので
$name[$i]($text[$i]の$iと同じ要素に格納されている部分)もいっしょにポップアップ表示させたいと思っております。
可能でしょうか?
0364nobodyさん
04/07/25 04:59ID:???0365nobodyさん
04/07/25 05:12ID:???どうしたいのか判らんけど、
$replacement = '"<a href=\"#$1\" title=\"名前:$name[$1] 本文:$text[$1]\">>$1</a>"';
じゃだめなのか?
もっと複雑なポップアップをしたいのなら、以前に言われてたけど
ブラウザに任せずJavaScriptを使うべき。
そういや>>295でサニタイズ済みなことを前程にしているのだから、$patternは
$pattern = "|>([0-9]+)|e";
だったな(&の置換忘れ)
0366nobodyさん
04/07/25 05:56ID:FYTamtubrequire_once 'PEAR.php';
とかすると、バイナリ版使ってるためかソースが見つからず動作しない。
とりあえずソースだけ持ってこようと思ったんだけど、
どのソースを移せばいいのかよくわからない。
誰かたちけて。 PHP5です。
■ このスレッドは過去ログ倉庫に格納されています