トップページphp
1001コメント315KB

【PHP】下らねぇ質問はここに書き込みやがれpart14

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/12/18(日) 10:10:12ID:???
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい
過去スレは>>2
0712nobodyさん2006/01/07(土) 10:58:29ID:???
>>711
どういう風にデータをいじるのか分からないからなんとも言えないけど、
統一しておいた方が何かと楽でしょ。いちいち変換するオーバーヘッドが
惜しいってほどパフォーマンス要求がシビアなら別だけど。
0713nobodyさん2006/01/07(土) 10:59:53ID:???
>>702
つかとりあえず配列につっこみなさい。
見にくいし、凡ミスを誘発するコードの典型だぞ。
0714nobodyさん2006/01/07(土) 11:10:19ID:???
>>701
685 じゃないが、意味がわかんね

$link にマッチ結果が配列で入るのが当然であって、
$line[1] になんか何も代入されないだろ?
0715nobodyさん2006/01/07(土) 11:29:22ID:???
みなさんデバッグ等の環境は何使ってらっしゃるんでしょうか?
当方今までずっと

サーバサイドでEmacs直接編集→Apacheの公開用ディレクトリにコピー→直接WEBから参照

でやってたんですが、
さすがになにかしらマトモなデバッガや開発環境使った方がいいかなと思い始めまして…

Eclipse+dbg辺りかなぁと思っているのですが使用されてる方のコメント等聞けたらな、と
0716nobodyさん2006/01/07(土) 11:32:34ID:???
>>715
>>70のIDEスレで聞くといいかもよ。
07177152006/01/07(土) 11:36:33ID:???
>>716
ありがとうございます
統合環境スレ辺りでログ漁りしてみます
0718nobodyさん2006/01/07(土) 11:42:13ID:???
デバッガで追う前にテストちゃんとやれと思うんだが、どうか
0719nobodyさん2006/01/07(土) 12:21:51ID:jsajv2SX
CSVファイルをダウンロードさせるプログラムを書いたんですが、
テスト環境ではうまく動いたのに本番環境では動きませんでした。

[テスト環境]
Fedora Core 3
Apache 1.3.33
PHP 4.3.11/Apacheモジュールとして組込

[本番環境]
Redhat Enterprise Linux 3
Apache 2.0.46
PHP 4.3.2/Apache2Filterとして組込

レスポンスヘッダを見てみると、なぜか本番環境ではConnectionヘッダが常にcloseだったので、
これが原因かと思ってhttpd.confでKeepAliveディレクティブをOnにしました。
それでもConnection: closeになってしまうので、
PHP側でheader("Connection: Keep-Alive/r/n");と書いたんですが、
それでも後からcloseが追加されてConnection: Keep-Alive, closeみたいになってしまいます。
他のhtmlやcssファイルなどの静的コンテンツも常にConnection: closeで返ってきます。
httpd.confのHeaderディレクティブで書き換えても同様なので、
何かが後から強制的に書き換えているように思えます。
何か対応策をご存知の方、ご教示頂ければと思います。
0720nobodyさん2006/01/07(土) 13:49:10ID:???
>>719
ブラウザ側で Persistent Connection が無効になっていると
当然 Apache は Keep-Alive をしようとしない。
ブラウザ側の設定はどうなってるのか確かめた?
0721nobodyさん2006/01/07(土) 14:03:57ID:TbKqhVyi
配列の最後に要素を追加したいのですが例えばhoge => hello
というデータを入れたい場合どうしたらよいのでしょうか?
array_pushだと値だけなら格納できますがキーまで入れることできないみたいなので・・。
0722nobodyさん2006/01/07(土) 14:22:54ID:???
キーを指定している段階で「最後」という概念から外れると思うのだが。
0723nobodyさん2006/01/07(土) 14:35:18ID:TbKqhVyi
>>722 ・あれ・・
配列の認識自体間違っていたら教えてください。
例えば上の値を最初に入れたら
配列の中は 0 => hello,hoge=>hello でこれはあくまで1つの箱に入っているんですよね?
0724nobodyさん2006/01/07(土) 14:42:21ID:???
ばかだなー
0 => helloなんてどっからでてきたんだ。
つーかふつうに$array["hoge"] = "hello"ってやれば「最後」に入るし。
0725nobodyさん2006/01/07(土) 14:46:45ID:???
hoge => hello という記述自体が hoge がキーで hello が値という
意味なので、「上の値を最初に入れる」という段階でおかしい。

あと >>724 の言う「最後」は PHP 独自のことなので気をつけておくこと。
他の言語では、ハッシュ(連想配列)に順番なんてものはない。
0726nobodyさん2006/01/07(土) 16:31:59ID:???
他人のサイトを紹介するサイト作ってて、他人のページがいつ更新されたかを調べるプログラム作りたいんだけど、どうすればいいの?
filemtime()で取得出来るのは、自分のサーバーにある物だけらしいし・・・
教えて下さい。
0727nobodyさん2006/01/07(土) 16:41:36ID:???
>>726
実際に箱を開けて見なきゃ猫が生きているかどうか分からないわけで。。
簡易チェックであれば、HTTPヘッダを調べればよいかと。
0728nobodyさん2006/01/07(土) 16:56:59ID:???
>>727
返事トンクス
そのHTTPヘッダを調べる簡易チェックでも更新日とか分かりますか?
また、どのようにすればいいのでしょうか?
ググってるのですが、なかなかページが見つからなくて・・・
0729nobodyさん2006/01/07(土) 16:59:32ID:???
$req = HEAD ".$url." HTTP/1.0\r\n";
$req .= "Host: ".$host."\r\n";

$fp = @fsockopen($host, "80", $errno, $errstr, "30");
if(!$fp) {
$res .= "Error: ".$errstr." (".$errno.")";
} else {
fputs($fp, $req);
while (!feof($fp)) {
$res .= fgets($fp, 164000);
}
fclose($fp);
}

ヒントみたいなもの。
0730nobodyさん2006/01/07(土) 17:00:54ID:???
あ、HTTPヘッダからは、htmlとかの静的ファイルしかできませんよ、
(CGI/PHPの類は無理です、と。)
0731nobodyさん2006/01/07(土) 17:01:47ID:???
ありがとです!
参考にして頑張ってみます!
0732nobodyさん2006/01/07(土) 18:03:24ID:???
PHPを使用していて
2つのサーバーでセッションの共有がしたいのですが
何かいい方法ありませんでしょうか?
0733nobodyさん2006/01/07(土) 18:07:39ID:???
>>732
・DBに格納してDBMSから共有
・ファイルに格納してNFSとかでファイル共有
07347192006/01/07(土) 18:41:48ID:jsajv2SX
>>720
有効になっているので、サーバ側に問題があるんじゃないかと考えています。
テストサーバでは問題なくKeep-Aliveを返すので、
PHPがhandler型じゃなくてfilter型なのも一因となっている可能性ってあるんでしょうか?
0735nobodyさん2006/01/07(土) 18:44:13ID:???
apache2 のテスト環境は用意できないの?
07367192006/01/07(土) 19:02:51ID:jsajv2SX
>>735
確かにそうすれば良かったんですが、
工数が少なかったため既存のテスト環境を利用しました。
本番と同一環境であれば今更困ることはなかったと承知しています。
0737nobodyさん2006/01/07(土) 19:39:47ID:???
ところで、csvファイルののダウンロードが出来ない件と、Keep-Aliveできないのとは
関係ないと思うけど。
0738nobodyさん2006/01/07(土) 19:46:33ID:???
PHPはWeb特化言語らしいですが、
ブラウザを通すことなく、
Windows用のプログラムを作ったりすることは可能なのでしょうか?
0739nobodyさん2006/01/07(土) 19:48:47ID:???
>>738
ローカルでwebサーバも起動すればできるけど
0740nobodyさん2006/01/07(土) 19:52:13ID:???
>>739
コマンドラインで利用できる
0741nobodyさん2006/01/07(土) 19:57:49ID:???
PATH通してperl代わりに文章整形につかってる
curlとか使って通信するのも便利
0742nobodyさん2006/01/07(土) 20:05:22ID:???
>>733
便乗質問

外部のサーバと、だとどうだろ。
やっぱ両サーバからDBアクセスできるようにしておいて、かなぁ…
0743nobodyさん2006/01/07(土) 20:32:34ID:???
>>738
php-gtkとかWinBinderとかがあるよ。

>>742
外部鯖とセッション共有って、、、なんて恐ろしい子!
0744nobodyさん2006/01/07(土) 20:58:07ID:???
>>733
ありがd
共有のDBにセッション情報を入れるという事でOK?
0745nobodyさん2006/01/07(土) 21:32:09ID:???
>>741
Perl 代わりにはすげー使いにくいと思うがなぁ
0746nobodyさん2006/01/07(土) 22:59:57ID:???
>>745
mb系関数をメインで使うなら案外便利かもよ
0747nobodyさん2006/01/07(土) 23:01:43ID:???
mb_* はバギーだけどね
0748nobodyさん2006/01/07(土) 23:29:15ID:???
エンコ関係はバギーだけど、編集関係はそんなこともないと思ってたけど違う?
0749nobodyさん2006/01/08(日) 00:52:50ID:Gpu+sfrF
初歩的な質問ですいません。
PHPでメールフォームを作成予定です。
mb_send_mailなどで以前メールフォームを作成した経験があります。

ただ今回作成予定のレンタルサーバのサポートに下記のような記述がありました。
>PHPはCGIモードでインストールされている為、モジュール特化の機能は利用出来ません。
これってどのような意味なのでしょうか?

以前作成したレンタルサーバでは拡張子は.phpで実行できました。
>CGIモード
とは拡張子を.cgiで実行する場合のことなのでしょうか?
また「モジュール特化の機能」とはどのような機能なのでしょうか?
0750nobodyさん2006/01/08(日) 01:08:45ID:???
>>749
>>PHPはCGIモードでインストールされている為、モジュール特化の機能は利用出来ません。
>これってどのような意味なのでしょうか?
主にこんな機能
http://www.php.net/manual/ja/ref.apache.php
あとCGI版にsuEXECなんかを組み合わせてると
また別に違いが出てくるけど、それは機能の違いというより機構による差異。

>CGIモード
とは拡張子を.cgiで実行する場合のことなのでしょうか?
これは関係ない。拡張子による動作の割り当てはWebサーバの設定の話であって
PHPがApacheモジュールか、CGI版かには関わらない。
0751nobodyさん2006/01/08(日) 01:31:01ID:Gpu+sfrF
>>750
ありがとうございます。
mb_send_mailなどは使えるようですね。

またいろいろ調べてみたら、ソースの頭に
#! /usr/local/bin/php
などのパスが必要な場合などあるなどを見ました。

以前のレンタルサーバではサンプルソースなど色々
情報が載っていたので初心者の私でもなんとかなったんですが
今回のレンタルサーバにはPHPは使用可能。
とはあるですが、上記のようなパスの設定が必要なのか?パーミッションの設定は?
などは特に説明がありません。

基本を勉強しないとダメですね・・
とにかく>>750さん
ありがとうございます。





0752nobodyさん2006/01/08(日) 01:44:03ID:???
HTTPが理解できないやつはPEARを使えばいいと思う。
0753nobodyさん2006/01/08(日) 01:55:00ID:???
>>752
長距離パスすぎてどれのことか分からん。レスアンカーくらいつけてくれ。
0754nobodyさん2006/01/08(日) 05:03:26ID:???
携帯向けにjpgファイルをリサイズして出力するスクリプトを書いています。
指定したサイズより大きい画像をリサイズする処理は完成しているのですが、
それ以下のサイズの画像もimagejpeg()の段階で画像が劣化してしまいます。
何かうまく回避する方法はないでしょうか?
0755nobodyさん2006/01/08(日) 05:06:33ID:???
>>754
劣化させなたくなかったらリサイズしなければいいじゃない
0756nobodyさん2006/01/08(日) 05:11:17ID:???
>>754
サイズを判定して処理不要ならそのまま出力すれば?
07577542006/01/08(日) 05:20:48ID:???
>755,756
ありがとうございます。

サイズ判定はやっています。
ブラウザにjpgを出力するにはimagejpeg()使う以外に無いですよね?
私の勘違いでしょうか?

>そのまま出力する
とは画像ファイルにリダイレクトするということでしょうか?
なるべくなら、それは避けたいのです。
0758nobodyさん2006/01/08(日) 05:40:18ID:???
んー。readfile()とかfpassthru()とかfread()+fwrite()とか。
バイナリで出力できるやつならなんだって構わないと思うんだけど。
07597542006/01/08(日) 05:48:57ID:???
ありがとうございます。解決できそうです。
画像処理にばかり気を取られて頭が固くなってました。
0760nobodyさん2006/01/08(日) 10:47:15ID:???
>>748
mb_ereg ってこと?
まぁ出所違うからね。そういう判断もできるかも。
0761nobodyさん2006/01/08(日) 15:05:00ID:???
ハッスルサーバーかりて、

<html>
<head>
<title>SaveCookie</title>
<?php
mb_language('Japanese');
mb_detect_order('sjis-win,eucjp-win');
mb_internal_encoding("UTF-8");
?>
</head>
<body>
<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?>
SAVED COOKIE "email"
</body>
</html>

を表示してみたところ下のようなメッセージが返ってきたなり。

Warning: Cannot modify header information - headers already sent by
(output started at /home/happylife/public/www/cookie_rec.php:4)
in /home/happylife/public/www/cookie_rec.php on line 13
SAVED COOKIE "email"

セキュリティの設定をすべてのクッキーを有効にしても、
ファイヤーウオールを無効にしてもこのメッセージが出続けます。

どうしたら良いのでしょう?
0762nobodyさん2006/01/08(日) 15:10:32ID:???
[俺サマ訳]
警告: (HTTP)ヘッダー情報を修正することができません
- だって、ヘッダーは既に送信されていたんだもん。
0763nobodyさん2006/01/08(日) 15:16:20ID:???
>>761
setcookieは、"<?php"の前に何かがあっては送信できませんし、
setcookieより前にecho等があっても送信できません。

"<?php"の前は、たとえ空行でも、入れちゃだめよ。
0764nobodyさん2006/01/08(日) 21:57:56ID:???
>762,763

ありがとうございます。
動きました♪
0765nobodyさん2006/01/08(日) 22:37:56ID:???
$fp = fopen("hoge.txt", "r+");
flock($fp, LOCK_EX);
こんな感じでファイルロックを行うと、ファイルをオープンしてからロックするまでの間に他のプロセスがファイルをオープンすることはないのでしょうか?
0766nobodyさん2006/01/08(日) 22:41:05ID:???
>>765
ある
0767nobodyさん2006/01/08(日) 22:55:29ID:???
>>765
>ファイルをオープンしてからロックするまでの間
どんな一瞬だよw
0768nobodyさん2006/01/08(日) 23:12:10ID:???
DBに頼りすぎてファイルロックの基礎も分かってない素人が多すぎだよね >PHP開発者
0769nobodyさん2006/01/08(日) 23:15:37ID:???
オープンされてもロックが取得できなきゃいい
というか、意外とまともに説明されてることって少なくね? < flock
07707652006/01/08(日) 23:30:43ID:???
hoge.txtを毎回書き換える場合(カウンターなど)これだとまずいですよね。
ロック用のファイルを作っておいてそれをロックするようにすればいいでしょうか?
0771nobodyさん2006/01/08(日) 23:34:36ID:???
'w' で fopen しちゃうとアウトだね
0772nobodyさん2006/01/08(日) 23:48:15ID:???
強固なflockのサンプルコード

↓よろ
0773nobodyさん2006/01/08(日) 23:51:54ID:???
>>770
パターン的には2通り。
1つは複数のプロセスでopenはできることを前提に、flockが解除されて
順番が回ってきたプロセスは「まずrewindして中身を読み直す」ことから始める。
ファイルのオープンモードがw系以外であることが条件。
もう1つは対象ファイル以外にロック専用のファイルを用意しといて
それがロック中は以降の処理全体を止める。いわゆるプロセスロック。
ファイルをいきなり消しちゃう場合や、複数のファイルを扱う場合などはこれ。

この種の「ロックの粒度」の話はRDBMSの試験にも出ますよw
0774nobodyさん2006/01/09(月) 00:01:04ID:???
まぁ細かいこと考えずに安心したいっつーんならロックファイルを用意
するのがいちばんやね。ファイルが増えて邪魔くさいって欠点はあるけど
07757652006/01/09(月) 00:08:16ID:???
>>773
rewindするとオープンした後に書き換えられたデータも読めるんですか?
0776nobodyさん2006/01/09(月) 00:08:18ID:???
1分置きにクーロンで破損検査すれば解決
0777nobodyさん2006/01/09(月) 00:15:19ID:???
rewind しなくても読めるよ
rewind が何をするものなのか考えてみよう
0778nobodyさん2006/01/09(月) 00:20:19ID:???
他のプロセスに書き換えられた場合ポインタの位置がずれているからですか。
0779nobodyさん2006/01/09(月) 00:21:50ID:???
>>778>>765です
0780php developer teams2006/01/09(月) 13:07:16ID:r4dXJ2hk
DBに書き込む際、改行(enterでの)が \n となってしまい、PHPで実際に表示してみると改行できていないのです。

どうすれば改行できるようになるのでしょうか?
0781nobodyさん2006/01/09(月) 13:09:17ID:???
>>780
つ nl2br
0782nobodyさん2006/01/09(月) 18:06:26ID:???
file()を使えば、1行目を[0]に、2行目を[1]に入れることが出来ますが、
[0]にfile()で読み込んだソース全部を入れることは出来ないんでしょうか?
0783nobodyさん2006/01/09(月) 18:12:36ID:???
>>782
file_get_contents使えよ
0784nobodyさん2006/01/09(月) 18:15:21ID:???
>>782
>>783のでいいと思うがPHPのバージョンが古くて(4.2.x以前)使えない場合は
join("",file(〜))で同じことができる。(が、file_get_contents()の方が速い)
0785nobodyさん2006/01/09(月) 18:16:35ID:???
>>780
それ、別にDB関係ないし。
改行と<br>の区別くらいつけろ。
0786nobodyさん2006/01/09(月) 18:33:38ID:???
>>783-784
トンクスです
0787nobodyさん2006/01/09(月) 18:46:35ID:???
マニュアルにもあるけど
fopen して fread( filehandle, filesize( filename ) )
って手もあるな
0788nobodyさん2006/01/09(月) 20:03:42ID:???
a
は1バイトですが、

は3バイトですか?
0789nobodyさん2006/01/09(月) 20:13:30ID:???



0790nobodyさん2006/01/09(月) 20:13:49ID:???
>>788
「あ」もそうですが「a」も 文字エンコードによって変わります。
0791nobodyさん2006/01/09(月) 20:15:04ID:???
>>790
あっ、なるほど
謎が解けました。ありがとです
0792nobodyさん2006/01/09(月) 22:34:46ID:+5WHmeqf
もし\が2個以上重なっていたら(\\) ひとつ省き\と、又\\\\となっていたら\\\を省きひとつにと\がひとつ以上の場合はすべてひとつに変換するようにしたいのですがうまくPHPでプログラムを組めません。

どなたか簡単なプログラムを作成してください。お願いします。
0793nobodyさん2006/01/09(月) 23:12:01ID:???
>>792
preg_replaceで正規表現を使うのが筋だが、嫌なら
$str = stripslashes($str); とか

つか少し頭使うなり調べるなりせんと上達しないよ?
0794nobodyさん2006/01/09(月) 23:26:06ID:???
みなさんはワンタイムチケットの実装をどうしてますか?

HTML_QuickFormを利用していますが、なんか面倒で。
07957232006/01/10(火) 12:55:21ID:s2ru7jHC
>>724-725
遅くなってすいません、ありがとうございました。
0796nobodyさん2006/01/10(火) 13:11:23ID:???
自宅鯖ではなく、レンタルサーバを利用しています。

一つのディレクトリに納まっている複数のファイルをまとめ、一つのファイルにし、
これを圧縮するにはどうしたら良いのでしょうか。

圧縮はさておきまとめるというとtarを使うと思うのですが、
 $aaa = system('tar -cf ./after.tar ./before', $bbb);
なんてことをしてもできないようなのです。
system関数が使えないとなると、他に手はないでしょうか。
0797nobodyさん2006/01/10(火) 13:55:20ID:???
レンタルサーバー、レンタルサーバー言うやつは、どこか晒せよ。
特にさくらの鯖とか、CGI版だって知らないで聞いてるアホも多いんだから。

「system関数が使えない」ってのは、「関数が」使えないの?
それとも、`ls`なんかは出来るわけ?

パスが通ってない可能性も踏まえ、which tarしたフルパスにするとかしてみれ。
tarが使えないようになっている以外なら多分出来るはずだ。
07986752006/01/10(火) 15:23:09ID:???
>>675
簡単に分からない問題なのか、それとも初歩過ぎてレスがつかないのか…
0799nobodyさん2006/01/10(火) 15:34:18ID:???
要素が大杉

var $str1 なんだから本来 $str1 と比較してマッチするはずがない
ereg に日本語を突っ込んでも信用できない
スクリプトを sjis で書いてると他にもおかしなこと起きやすい

以上から、たぶん晒した以外のところもかなりおかしなことになってるはず

結論としてはもっと勉強してくれ
0800nobodyさん2006/01/10(火) 16:04:59ID:hzjvsGhO
$2cht = preg_replace("/\\\\+\/","",$2ch);こういった使い方は可能でしょうか?

\が1つ以上ある場合はすべて消去したいのですがエラーが表示され機能してくれません。
0801nobodyさん2006/01/10(火) 16:08:12ID:???
>>798
判断に迷う質問だから放置してた。
ふつーに考えたら$str1と$this->str1を入れ替えるなんてこと自体がありえないので、
一体何をやろうとして何に引っかかってしまったんだか想像がつかない感じ。

結論:かなり大ボケかましてない?

というか多分、$this->str1は中身が空っぽになってて、
それで何にでもマッチしちゃうだけじゃないの?という気がする。
0802nobodyさん2006/01/10(火) 16:09:17ID:???
>>800
"/\\\\+\/" は "/\\\\+/" の間違いじゃないのか。
最後の \ は何に対しての \ なんだよ。
0803nobodyさん2006/01/10(火) 16:24:04ID:???
>>798
ありえないというか意味不明でレスのつけようがない
<?php
class test {
var $str1 = "テスト";
function view($str1) {
echo "\$this->str1=".$this->str1;
echo "<br>\n";
echo "\$str1=".$str1;
}
}
$a = new test;
$a->view("ホゲ");
?>
0804nobodyさん2006/01/10(火) 16:55:37ID:Gn5rV4CT
mysql_escape_stringでエスケープした文字を元に戻す関数とかありますか?

\と入力すると\\になったりして入力と異なるのでそれを直したいです。
0805nobodyさん2006/01/10(火) 17:29:27ID:???
>>797
申し訳ございません。XREAにてmod_phpで動かしています。

仰るとおり $aaa = system('which tar', $bbb); を試みましたが、
>>796のコード同様、$bbbには127という値が入っているのみでした。
0806nobodyさん2006/01/10(火) 17:55:04ID:???
>>804
入力元をコピーして残しとけば?
普通、mysql_escape_stringなんてDBに書き込む直前以外には実行しないだろー
0807nobodyさん2006/01/10(火) 17:55:41ID:???
マニュアルを読むんだ
0808nobodyさん2006/01/10(火) 18:38:31ID:???
>>796
さくっとPEAR使ったら?
http://pear.php.net/package/PHP_Archive/
http://pear.php.net/package/Archive_Tar/
圧縮は要lib
0809nobodyさん2006/01/10(火) 19:06:48ID:???
>>800
数字で始まる変数
0810nobodyさん2006/01/10(火) 21:52:48ID:???
>>808
Pearなどを使うのは初めてでしたが、適当にいじってるうちに成功しました。
ありがとうございました。
0811nobodyさん2006/01/10(火) 21:57:13ID:Gn5rV4CT
Wikiみたいに[ほげ[http://hoge.vom/]]と入力されたら<a href="http://hoge.vom">ほげ</a>と変換するにはどうしたらいいのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています