【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
抜けているものがあったら補足願います
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です。
0367nobodyさん
04/07/25 06:17ID:???0368nobodyさん
04/07/25 09:25ID:???Windows版のほうはあんまり使ってなくてうろ覚えなんだけど、
php.iniでinclude_pathをC:\PHP\PEARとか、ちゃんと設定しる。
もしくはスクリプト冒頭でini_set('include_path', '.;D:\path\to\pear');とかそんな感じ。
0369nobodyさん
04/07/25 14:31ID:???global $hoge;
foo();
exit;
function foo(){
print ($hoge);
}
これは動きませんかね?
0370369
04/07/25 14:43ID:???これなら自分で確かめた方が早いです
0371369
04/07/25 15:01ID:???普段は偉ぶってるくせに無能揃いですね。
0372nobodyさん
04/07/25 15:15ID:???0373nobodyさん
04/07/25 16:17ID:???/ || ̄ ̄|| <⌒ヽ )) < >>371 はてさて、
| ||__|| < 丿 | どこを縦に読みゃいいんだ?
| ̄ ̄\三⊂/ ̄ ̄ ̄/ \___________
| | ( ./ /
0374nobodyさん
04/07/25 16:27ID:???0375369
04/07/25 19:37ID:???うちのお兄ちゃんは大学院に行ってるからはっきり言ってお前らより上。
もう偉ぶるのやめてね
0379nobodyさん
04/07/25 22:31ID:???今入退室を付けたチャットを作ってるんです。それで、入室時に名前、時刻、IPを
name<>date<>ip<改行>name<>date<>ip<改行>
の形式でログに保存して、最近の入室履歴ってことで、最新10まで[name 時刻:data]で表示させようと思います。
以下のでやってみたのですが、何も表示されず・・・。何が問題でしょうか。
$data = file('log.log');
for($i = 0;$i > 10;$i++){
$v = split('<>', $data[i]);
echo("$v[0] 時刻:$v[1]<br>");
}
0380379
04/07/25 22:35ID:???$v = split('<>', $data[i]);
↓
$v = split('<>', $data[$i]);
0381nobodyさん
04/07/25 22:45ID:???> for($i = 0;$i > 10;$i++){
このへん。
echoの中身も表示されないし、forループに問題があることにすぐ気づかないと。
0382379
04/07/25 22:49ID:???$i>10じゃ動くはずが無いと・・・。
どんなパズルもわかっちゃうと簡単すぎて笑っちゃうもんですね。
わざわざありがとうございました。
0384nobodyさん
04/07/26 00:03ID:???requireとrequire_onceはどう違うのでしょうか?
ヘルプを呼んだ限りでは、毎回読み込むか一回読み込むかの違いみたいに
書いてあったのですが、PHPはリクエストのたびにスクリプトを毎回読み込むのではないのですか?
一回しか読み込まないとはどういう動きをするのでしょうか?
0385nobodyさん
04/07/26 00:28ID:???0387nobodyさん
04/07/26 02:49ID:???すでにincludeしたファイルを再び読む込むように指定した場合の挙動の違い。
例えば、読むファイルをテンプレート代わりに使う場合はinclude、
共通ユーザー関数群の定義に使う場合はinclude_onceを使うといい
下手な釣りを見て思い出したが、PHPにはユーザーによる変数の
スーパーグローバル化やラベルジャンプがないのでちょっと困ることがあるな。
あれば楽できるのに・・・と思う局面がたまにある
0388nobodyさん
04/07/26 02:54ID:sMxRgzIjファイルをアップロードするスクリプトを組んでいるのですが、ファイルのサイズがある程度大きくなるとうまくいきません。
1) 651バイトの画像ファイルは正常にアップロードできました。
2) テスト用に文字列"1234567890"で埋めた 161,876バイトのテキストファイルは以下の様になります。
type : text/plain
size : 321880
error: 0
実際にUPされたファイルを見てみると
先頭に1,260バイト分 "1234567890"が入っていて次に
-----------------------------7d420b560c66
Content-Disposition: form-data; name="upfile"; filename="クライアント側のファイル名"
Content-Type: text/plain\r\n\r\n
その後最後まで"1234567890"が入っているようです。
(その後の部分は多いのでざっと目視しただけですが、少なくともodでダンプ取った範囲では 1164520=321,872まではデータが埋まってました)
環境は RedhatLinux9.0 PHP-4.2.2 Apache2.0.40 で
file_uploadsはOn
upload_max_filesizeは1M
に設定してあります。
同じスクリプトを別サーバにて動作させると正常に作動するのでどうにも原因がわからないです。
怪しそうな所をお教えください。
ちなみに動作するサーバでも似たような構成で動かしています。
RedhatLinux9.0 PHP-4.2.2-17(SRPMからMB_STRINGをONにして自分でコンパイルした)+ Apache2.0.40 です。
0389388
04/07/26 04:29ID:sMxRgzIj試にうまく動作している方のサーバから自分でビルドしたPHPのパッケージを動作していないサーバにFTPしてインストールしてみました。
php.iniもコピーしました。
結果は以前と同じでサイズが倍ほどに膨れます。
PHPの問題ではないみたいですね。
訳がわからなくなってきました。。
0390nobodyさん
04/07/26 05:49ID:IOiIX+Frvodafoneからだと見られないという報告を受けました。文字コードとうで
何か気をつけるべきことがあるのでしょうか?詳しい方教えてください。
0391nobodyさん
04/07/26 05:49ID:???POSTメソッドを使ったアップロードでFAQ的なところだけど。
0393nobodyさん
04/07/26 09:23ID:zfZRDkJ9ファイルのオーナーがapacheの実行オーナー(nobodyさん)になってしまいます。
これを、自分のアカウントがオーナーにしたいです。
また、ファイルの内容は変更することがあるので、その時には、ファイルのオーナーを
nobody さんに戻せないといけません。
よろしくおながいします。
0395nobodyさん
04/07/26 11:18ID:BnaAbQE9変数$foo['hoge'][$bar['huga']]を表記するにはどうすればいいですか?
単に、${foo['hoge'][$bar['huga']]}では
Parse error: parse error, expecting `'}''
となります。
0397nobodyさん
04/07/26 11:23ID:BnaAbQE9ありがとうございます。解決しました。
{$hoge[]}と${hoge[]}の文法的な違いってなんですか?
0398nobodyさん
04/07/26 11:32ID:zfZRDkJ9vodafoneのキャッシュ制限にひっかかってない?
非パケ端末は1ページ6kbyte以下ですよ。
0399nobodyさん
04/07/26 11:32ID:???マニュアルを読みましょう。「変数のパース」以下を読んでみて下さい。
http://www.php.net/manual/ja/language.types.string.php
0400nobodyさん
04/07/26 11:57ID:???まあ、一々宣言すればいいんだけど、$PHP_SELF位は
スーパーグローバルに登録された方が楽かな・・・とは思うもんで。
それともこういう書き方は(・A ・)イクナイ?
0401nobodyさん
04/07/26 13:06ID:U4MCK2zg1:タイムスタンプ名のディレクトリをumask設定してから作成
(他のサイトでumaskしたらいいと書かれていました)
$oldmask = umask(0);
$dir = mkdir($timestamp,0777);
umask($oldmask);
2:そのディレクトリに画像をアップ
3:$name = $dir."/1.jpg";
これでechoで$nameを出力させるときちんとjpg名が出力されるのですが、
is_file($name)等でファイルの存在を調べると、falseが返ってきます。
これはなぜなのでしょうか?知ってる方お願いします。
0402nobodyさん
04/07/26 13:20ID:???アップロード処理の例外処理とかちゃんとしてる?
0404nobodyさん
04/07/26 14:17ID:???Windowsではできてると言っているのに、、、
「Macでは試験したことが無いですが、Windows限定でよければ。」ってアフォか
0405nobodyさん
04/07/26 14:24ID:???そういうおもしろいのは↓へどうぞ
http://pc5.2ch.net/test/read.cgi/php/1090322290/
0406nobodyさん
04/07/26 14:29ID:???0407401
04/07/26 14:42ID:U4MCK2zg$nameを出力すると「123456789/1.jpg」みたいになります。
<img src=$name>
はきちんと画像が表示されます。画像はアップされています。FTPでも画像の存在を確認できます。
でもis_file($name)はfalseが返ってくるんです。
is_file("123456789/1.jpg") で確認するとTRUEなのですが、is_file($name)はFALSEなんです。
0408nobodyさん
04/07/26 15:07ID:???0409401
04/07/26 15:26ID:???フルパスでも無理でした。
mkdirで作成したディレクトリにあるファイルをis_fileで調べた場合FALSEを返すのでしょうか?
is_dir($dir)もFALSEでした。
※$dirにはmkdirで作成したディレクトリ名(フルパス)
0410nobodyさん
04/07/26 15:32ID:???0411nobodyさん
04/07/26 15:34ID:4tJVtMcehtmlspecialcharsを使うと♥等の文字実体参照ができなくなってしまうのですが、
対処方法はあるのでしょうか。
&amp;を全て&に変換してから表示させれば実現できることを確認しましたが
それだとhtmlspecialcharsの意味が無くなるし・・
よろしくおながいします。
0412401
04/07/26 15:42ID:???はい・・・file_existsもfilesizeも、mkdirで作成したディレクトリを含めその中にあるファイルの情報を
得ようとするとFALSEなんです。
if ( file_exists ( $name ) ) //FALSE
print "<img src='".$name."'>";//アップした画像が表示される
0413388
04/07/26 15:42ID:sMxRgzIjアドバイス有難うございます。
ApacheのPOSTデータの限度設定とはPHPのマニュアルサイトのUser Contributedにのっかっている
LimitRequestBodyのことでしょうか?
そちらを2Mで試してみていますがうまくいかないです。
0414nobodyさん
04/07/26 15:42ID:???0417nobodyさん
04/07/26 16:27ID:???そうそれ(うろ覚えでスマンね)。
現象が違う(倍に膨れる/該当するエラーが出てない)ので
違うとは思ったが、やっぱり関係ないね。
入ってるデータ見てるとWebクライアント自体がデータをマルチパート化して
その両方の形式とも送ってるみたい。使ってるのはIE?
別のWebクラインアントで試すか、送信データをキャプチャして見てみるのが良いかも。
0419nobodyさん
04/07/26 17:02ID:???■ このスレッドは過去ログ倉庫に格納されています