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

【PHP】質問スレッド Part5

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/09/11 14:15ID:FWA0CpdU
レスは気長に待つのが良い感じかも。


■本家
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-10あたりにきっと誰かが……。
0508nobodyさん02/10/22 21:24ID:???
>>507
言いたい事はわかるが努力が足りないようだ。
0509努力が&rlo;いなり足02/10/22 21:38ID:???
ようだ。
051050302/10/22 21:50ID:???
書き直し。。これでいいかの? >>508
> <>は、htmlでは <> に変換されるから
ぉぃぉぃ、俺は &lt;&gt; って書いたはずだぞ。
2chは & を &amp; に変換しないのか?
0511nobodyさん02/10/22 21:55ID:???
>>509は努力しすぎ
051250802/10/22 22:16ID:???
>>510
合格。だけど何かが足りない、何かが・・・
0513nobodyさん02/10/23 00:49ID:y/QVQMdn
もれは大量の改行とか以外は、投稿内容を as is でログに保存する
ことにしている。

読み出すときに、<>&"'などを「&xx;」に変換して表示するようにしている。
のでデリミタを<>はしないです。
0514nobodyさん02/10/23 02:04ID:???
デリミタごときで2バイトも使うなと言う意見が…
0515nobodyさん02/10/23 03:03ID:???
>>514
漏れのデリミタ変遷

\t
0516nobodyさん02/10/23 03:06ID:???
漏れのデリミタ変遷

\t オーソドクスに
↓
,  CSV
↓
| psqlマンセー
↓
<> Kentさん好き!!
↓
Unicode NULLモジ
↓
\t に戻る。
0517nobodyさん02/10/23 07:08ID:???
\tだと、ファイル見た時に横に長くなって見づらくねぇ?

0518nobodyさん02/10/23 11:08ID:???
>>517
縦に見ると項目が揃ってて見やすい。
0519nobodyさん02/10/23 11:25ID:???
項目の長さが違ったらずれるじゃん
0520nobodyさん02/10/23 13:02ID:knm2mfqY
ある連想配列に対して、array_pushのように、
末尾に要素を追加するにはどうすればいいのでしょうか?
0521nobodyさん02/10/23 13:25ID:???
>>520
$hoge_array[newkey] = 'newvalue';
0522486すいません02/10/23 17:28ID:???
ありがとうございました。
一応参考程度に自分がやったソースを・・・。

<?php
$test = explode("/",$HTTP_USER_AGENT);

if ($test[0] == 'DoCoMo')//←i-mode閲覧
{
●●●
}
else//←PC閲覧
{
○○○
}
?>
汚してすいません。
0523nobodyさん02/10/23 18:43ID:???
WebARENA使ってるんですが、そこのPHPは普通と違ってCGIで動くので
ファイルの先頭に#!/usr/local/bin/php4が必要だったりして、
Apacheの一部として動作するPHPと違ってたりするので、
PHP関連の書籍とか見ても、それに触れてるものを見かけません。
CGIでPHPを使うことに関して詳しいHPとか書籍とかあったら教えてください。
052445802/10/23 21:10ID:???
$ua = array("DoCoMo", "PDXGW", "ASTEL", "J-PHONE", "UP.Browser", "Lynx");
foreach ($ua as $val) {
if (preg_match("/$". $val ."\//", $_ENV['HTTP_USER_AGENT'])) {
$pda = true;
break;
}
}
if ($pda === true) {
携帯端末用処理;
} else {
一般向け処理;
}

マニュアルにはPOSIX準拠のeregよりもpregの方が早いと書いてある。
0525nobodyさん02/10/24 05:31ID:5F/44dYx
>>523
0526nobodyさん02/10/24 06:13ID:kpV1tydg
FORMにこのようにcheckboxを書いてPOSTすると、
同じ名前の最後の項目しか表示されません。何が悪いのでしょうか?
<input type="checkbox" name="1" value="あ">
<input type="checkbox" name="1" value="い">
<input type="checkbox" name="1" value="う">
<input type="checkbox" name="1" value="え">

foreach($_REQUEST as $key => $value) {
if($key == "1") { print $value; } //項目1を表示
}
052752602/10/24 06:15ID:kpV1tydg
>>526
同じ名前の最後の項目しか表示されません
↓
同じ名前のチェックした最後の項目しか表示されません
の間違えです。

whileでループさせても同じ結果です。
0528nobodyさん02/10/24 07:54ID:uytwvD+v
ひとつ質問なんですが、
PHPのincludeを使ってXSLを呼び出すことはできますか?
0529nobodyさん02/10/24 08:18ID:???
>>526
<input type="checkbox" name="1[]" value="あ">
<input type="checkbox" name="1[]" value="い">
<input type="checkbox" name="1[]" value="う">
<input type="checkbox" name="1[]" value="え">

それと、nameに数字はよろしくなさげ
$1とすると別の解釈される場合もあったような・・・
0530 ◆Kiss.FX29M 02/10/24 08:18ID:???
>>526-527
その動作で正しい。
名前を変えるか、配列に汁。
0531nobodyさん02/10/24 08:21ID:???
>>526
name="name[]"
で配列にしろ
053253102/10/24 08:23ID:???
ここの板でかぶるなんて珍しい。
0533nobodyさん02/10/24 12:58ID:7cFeMhsm
JavaでStringを文字列連結していてパフォーマンスが落ちてしまい
StringBufferで解決したという経験がありました。
PHPでは . で連結するよりよい(軽い)方法は
用意されていないのでしょうか?
. 連結でもさすがにJavaほど重くならないようですが。
0534nobodyさん02/10/24 14:09ID:rG1bP6Cf
MAC OSXで
IEやNNの右上についているツールや履歴の表示非表示を切り替えるボタンって
無効化できますか?
javascript の Openwindow()でツールバーやURLの表示無しオプションで
コンテンツ表示しているのに、そのボタンでURLなどが表示されてしまいます。
FLASHのゲームコンテンツなど、このボタンのおかげで困るケースがあります。



0535nobodyさん02/10/24 14:14ID:???
>>534
PHPでは出来ないと思います。
0536nobodyさん02/10/24 15:35ID:F6+LZK6Z
http://www.rescue.ne.jp/
レスキューってどうなったんですか?
0537nobodyさん02/10/24 15:46ID:???
>>533
ソースを見たわけじゃないんだが、phpはデフォルトでStringBuffer相当の
動きをしているのではないかとおもふ。
0538nobodyさん02/10/24 16:16ID:IkTbxMct
PHPってファイル書き込みで配列を書き込むことってできないの?
見たらArrayって入れられてたんだけど(fputs(),fwrite())
0539nobodyさん02/10/24 16:27ID:???
>>538
serialize();
054052602/10/24 17:44ID:kpV1tydg
>>530
あーそうなんですか。なるほど。
perlのときはそれでいけたような気がするけど。うーん。
0541nobodyさん02/10/24 17:49ID:???
すいません、教えてください。
mb_send_mail で添付ファイルを送信するやり方がよくわかりません。
どのように指定すればよいのでしょうか?
0542nobodyさん02/10/24 17:59ID:???
マニュアル嫁。
0543nobodyさん02/10/24 20:52ID:Ya2zNF/W
unset()の使い道って何?
変数を破棄すると、どんな利点があるの?
例えば、メモリが解放されるとか? <- この考えであってる?
0544nobodyさん02/10/24 20:58ID:???
>>536
どうなったんだ?活動やめちゃったのか??
0545hmk02/10/24 23:00ID:???
>>543
たとえば、ループ毎に、一時的に使っている配列を初期化したい場合とか、かな?
0546 ◆Kiss.FX29M 02/10/24 23:25ID:???
>>543
普通の変数を破棄するときはあまりないけど、配列を弄っているとき
例えば不必要な要素を破棄して並べ替えみたいなときに、たまに使う。
0547nobodyさん02/10/25 00:23ID:???
モジュールで動かすときってCGIで動かすときと違って何か気をつけなければいけないことってあるんですか?
負荷軽減のスレでちょっと話題になりかけていたんですが。
054853802/10/25 00:46ID:AgSiPFdD
何度もスミマセン
>>539
ありがとうございます。
これで保存はちゃんと出きるようになりました。
けど読み込みが上手くできません。。。
色々実験してみたんですが、
$file = file($filepath);
というように読み込んだ場合、配列として代入されるため
$file = unserialize($file);
としてもうまく動かないようなのですが。。。
とりあえず配列$fileを更にシリアル化して変数に直し、
それをunserialize()で配列に戻して、更にその要素をunserialize()で戻して
ファイルの各要素を取り出すという効率無視の処理をしているんですが、
何かもっと効率のいい方法はないでしょうか。
$file = file("$filepath");
$file = serialize($file);
$file = unserialize($file);
$file = unserialize($file[0]);
054953802/10/25 00:47ID:AgSiPFdD
>>548
訂正(するまでもないですけど
× $file = file("$filepath");
○ $file = file($filepath);
0550荒川太郎02/10/25 12:33ID:ykDTClkj
 Linux の PHP から 他サーバーのOracleにアクセスしたいのですが、やっぱり、
オラクルクライアントが入ってないと、アクセスできないでしょうか?

 自分の環境で試したところ、PHPをコンパイル後なら、$ORACLE_HOMEの中にある、
Network と sqlplus の二つのディレクトリが残っていれば動きましたが、他の環境に
そのファイルを単純にコピーしても動くか疑問なのと、ライセンス違反のような気がす
るので、できればOracleクライアントなしで接続できればと考えています。
055153802/10/25 12:34ID:AgSiPFdD
>>548
我ながら意味不明なことしてました。
スマソ
0552nobodyさん02/10/25 14:40ID:iOPLrEsc
ファイルのダウンロードをさせたくて以下のスクリプトを使っています。
http://php.s3.to/data/#dl

PHPを使ってasf(or asx) ファイルを再生させずに
ダウンロードさせたいのですが
asfの場合プラグインが動いてしまい再生が始まってしまいます。
asxの場合プラグインが反応し再生されません。

どうしたら良いのでしょうか?
0553nobodyさん02/10/25 14:58ID:???
>>552
拡張子で判断するのはIEなのでPHPではどうしようもない。
0554nobodyさん02/10/25 15:35ID:???
「IE の場合は、"対象をファイルに保存"で保存して下さい。」
とか書いてみる。
0555nobodyさん02/10/25 16:39ID:???
>>552
出力時のヘッダーをいじる。

糸冬りょーー
0556nobodyさん02/10/25 18:31ID:???
>>555
IEはヘッダーとか無視です。
05576102/10/25 19:35ID:???
<TITLE>の中身取り出しの問題は解決しますた。ありがとうございました。
ご報告が遅れました。ナマケモノレススマソ…。
0558nobodyさん02/10/25 19:42ID:???
>>552

header("Content-type: video/x-ms-asf");
header("Content-Disposition: attachment; filename=hogehoge.asf");

/* asf の内容 */
0559nobodyさん02/10/25 20:06ID:???
register_globals って、みんな、OFF にしてるもんなの?
0560nobodyさん02/10/25 20:31ID:???
>>559
4.2.0以降導入で、php.ini-dist, php.ini-recomendedをベースに
php.iniを作成した奴でregister_globalsを知らない奴はOFF
4.1.0以降4.2.0未満導入でphp.ini-distベースならOn、
php.ini-recomendedベースならOff
それ以前は、On
最近の厨は、Offだけど、Onが標準だったときのスクリプトを
拾ってきて質問しまくり

過去の資産のしがらみでOnは結構いる
厨と、まじめにセキュリティ対策を兼ねてコーディングを修正
したところはOff
厨が増加しているからOff比率も上がってるはず、たぶん
0561nobodyさん02/10/25 20:38ID:???
>>560
漏れは、Onの時のスクリプトの先頭に
import_request_variables を書き加えているだけで
よしとしていますが、やばいですか?

新規スクリプトでも$_POST['']とか書くの面倒なので
import_request_variables 使ってます。

php3もつかってるでし。
0562nobodyさん02/10/25 20:51ID:???
>>561
別にかまわんが、

<?php
// $debug = 1
if ($debug = 1) {
// coding for debug
// みちゃだめよデータ表示部分
}
// 後のコード

?>
みたいに未代入の変数を0と仮定した様なコーディングしてると
import_request_variablesはregister_globals=Onと一緒で意味無し
ttp://localhost/test.php?debug=1
でアクセスされると見えちゃう。
だから、未代入変数の評価が無いようにコーディングできるなら
register_globals=Onでもいいが、ケアレスミスの防止のためにも
_POST/_GET/_COOKIE['hoge']を使っておくのが安心なわけ

まじれすしてしまった
056356102/10/25 22:19ID:???
>>562
なるほど、
これからは$_POSTなどを使うようにします。

今までは、たとえばDBをいじるときなど(つまりSELECT以外)のときは
POSTしか受け付けない、といったポリシーで構築していたのですが、
その場合のみimport_request_variablesを使わないようにしていました。

import_request_variables の代わりに

function hoge ($label) {
if (@$_POST[$label]) {
$$label= $_POST[$label];
}
}

という風に問題のないものだけインポートするというのはだめですか?
056456102/10/25 22:32ID:???
それから、関連質問ですが、

たとえばその値がPOSTされたモノでもGETされたモノでもいいけど、Cookie
では困る。という場合は
import_request_variablesでは困るわけですね。
でも、
if (($_POST['hoge'] == "bar") || ($_GET['hoge'] == "bar")) {
hogehoge;
}
とするのはあまりにも面倒です。

この場合、セキュリティーを考慮しつつ、ミニマルエフォートでかいけつするにはどうしたらいいですか・

よろしくお願いします。
0565 ◆Kiss.FX29M 02/10/25 23:21ID:???
>>564
variables_order と $_REQUEST でどうよ。
0566nobodyさん02/10/25 23:32ID:8xkByx7Q
$_GET['id']が必須な場合で、値が渡されていない場合、
default値をあげたいのですが、


if(!isset($_GET['id'])
if(empty($_GET['id'])
if ($_GET['id'] == "")

のどちらが望ましいですか?
0567nobodyさん02/10/25 23:34ID:0gq4LIHA
http://taichi.mydns.to/自分では見れるのに、他人から見えないのはなぜですか?
0568 ◆Kiss.FX29M 02/10/26 00:13ID:???
>>566
ケースバイケース
ってか、必須項目ならそれ以前に大切な事があるだろう。
0569nobodyさん02/10/26 00:35ID:???
無料垢でSOCKET使えるトコてなくなってしまったんでしょうか・・。
誰か知ってたらこっそり教えてください。
言語は日英独のいずれかで。
0570nobodyさん02/10/26 00:36ID:???
>566
必須か必須でないの2択だけなのなら
$var = (empty($_GET['id'])) ? 'デフォルト値' : $_GET['id']);
って記述は良く使うかも。
0571nobodyさん02/10/26 16:58ID:???
>>561

『PHP4徹底攻略実践編』の「セキュリティの確保」の章を一読することを
はげしくオススメ。

わかりやすいよ。
0572nobodyさん02/10/26 19:11ID:cHKiK7hP
神様。お力をお貸し頂けませんでしょうか?
迷惑メール攻撃スレ【未承諾広告※】
http://cocoa.2ch.net/test/read.cgi/phs/1033486267/l50
0573nobodyさん02/10/26 19:25ID:yRABunW1
$a=0;
$b="";
で、$aと$bを判別する方法はありますか?
0574nobodyさん02/10/26 19:27ID:???
>>573
ヌルヌル。
0575さるる02/10/26 20:20ID:???
いままで こっそり質問してますた。
お許しください。
無料のPHPな鯖を、作ってみますた。
また、質問をこっそりとすると思うので
よろしくお願いします。

http://fh.aaacafe.ne.jp/
057657302/10/26 20:37ID:yRABunW1
>>574
$a=0;
$b="";
if($a==NULL) echo '$a==NULL<br>';
if($b==NULL) echo '$b==NULL';
を実行すると、
$a==NULL
$b==NULL
と表示されるんだけど、なんか間違ってる?
057757302/10/26 20:45ID:yRABunW1
$a=0;
$b="";
if(is_null($a)) echo 'is_null($a)<br>';
if(is_null($b)) echo 'is_null($b)<br>';
では、何も返さなかったです。
057857302/10/26 20:49ID:???
解決。var_dumpで方を調べればOKでした。
057957302/10/26 20:50ID:???
方→型です
0580nobodyさん02/10/26 21:08ID:???
PHP/4.4.0-dev
ってどんなVerなの?
今最新が4.3.0なのに それの上があるの?
0581nobodyさん02/10/26 21:25ID:???
>>580
後ろの -dev が全てを語ってると思うが・・・
0582nobodyさん02/10/26 22:50ID:???
作ってみましたっていって半年後に消える鯖の多いこと多いこと。
0583nobodyさん02/10/26 23:20ID:VJjRzkAf
置換について質問です。
以下のような文字列で
ほうぅ。http://shoichi.mien.nuなんだねhttp://shoichi.mine.nuだろぉ〜?
これのhttp://〜〜の部分を<A HRE=http://〜〜に置換したいと思います。
1つの場合はできるのですが、1つ以上の場合は思いつきません。
どなたかお知恵をお貸しください。
0584nobodyさん02/10/26 23:24ID:???
>>582
かれこれ無料サービス5年目ですがなにか?
0585nobodyさん02/10/27 00:17ID:???
>>583
ちなみに1つの場合ってどうやってんの?
0586 ◆Kiss.FX29M 02/10/27 00:29ID:???
>>583
ereg_replaceかpreg_replace1を使えば一発やん。
058758302/10/27 00:29ID:QX87Ao09
>>585
しょぼいですが、こんな感じです
if(ereg("http://",$done)){
$ldone = $done;
// URL
$urladd = mb_ereg_replace("[^0-9a-zA-Z\/:.]","",$ldone);
// LINK
$mdone = "<A HREF=\"".$urladd."\" target=\"_blank\">".$urladd."</A>\n";
$new .= mb_ereg_replace($urladd,$mdone,$done);
}
058858302/10/27 00:38ID:QX87Ao09
>>586
1行に1つ以上ある場合の処理が…わかりません。
パターンマッチした回数を取れれば、それをfor文で書けばいいのか。
でも、$number = ereg("http://",$text);
$textに2つurlが入っていてもなぜか$numberには1しかはいらない。
0589 ◆Kiss.FX29M 02/10/27 00:42ID:???
>>588
for文とそんなんじゃない。
一行のereg_replaceで全て差し替え出来ます。
がんばれよ。
059058302/10/27 00:44ID:QX87Ao09
>>589
了解です。
できるがわかったのでがんばってみます。
ありがとうございました。
0591nobodyさん02/10/27 00:58ID:???
PHPでシンボリックリンクを生成する構文があれば教えて頂けますか?
059258202/10/27 01:12ID:???
>584
なんのこっちゃ。
0593hmk02/10/27 02:06ID:???
>>591 symlink()
0594nobodyさん02/10/27 02:09ID:???
>591
マニュアルよめ
そのままズバリな関数あるだろ
0595nobodyさん02/10/27 02:24ID:???
>>573
===(=3つね)を使えばいいんでないの?(php3だと使えない気もしたけど)
059658302/10/27 08:58ID:QX87Ao09
昨日挑戦してたんですが、できませんでした。
どうしても、1つの行に違うURLがあると、一度のmb_ereg_replaceで
変更できませんでした。
何かヒントをもらえないでしょうか?
0597 ◆Kiss.FX29M 02/10/27 11:30ID:???
>>596
あなたが、>>587で書いたパターンを使うと、
$html = ereg_replace(
'(http://'.
'[0-9a-zA-Z\/:.]*)',
'<a href="\\0" target="_blank">\\0</a>',$text);
かな。
\\0ってのがみそ。マニュアルをもっと読もうな。
後はマッチパターンをぐぐるかRFCを読んで精度をあげてな。
がんばれよ。
0598nobodyさん02/10/27 11:38ID:Xr/mnh9j
性器表現ひとつに無駄スレするな!
059958302/10/27 22:53ID:QX87Ao09
>>593
ありがとうございます。
マニュアルに載っているものを質問してしまい
申し訳ありませんでした。
0600nobodyさん02/10/28 00:37ID:omMjIkHW
今までPerlでやっていたのですが、今回PHPで掲示板を
作成しようと思っています。
そこでjcode.pl(文字コード変換)を使用していたのですが、
以下のサイトを見たところ
>ttp://dokokano.com/php/php_charset.html
>出力をShift_JISにする場合は、入出力部分の文字コード変換のためのコードを書く必要があります。
ということは、EUCにすればurldecode関数によって
QUERY_STRINGの内容を日本語に変換することが
できるということでしょうか?
0601nobodyさん02/10/28 01:13ID:K9SZmaup
>>600
素直に新しめのバージョン(マルチバイト対応)使ったら?
0602 ◆Kiss.FX29M 02/10/28 01:14ID:???
>>600
あんさん情報ソースが古すぎ。
php4.0.6以降に対応した書籍を買うか、
ttp://jp.php.net/manual/ja/ref.mbstring.php
を読んで出直し。
0603nobodyさん02/10/28 01:15ID:???
どうしてもURLを変換したいってわけでなければ
リクエストを変数に入れてから変換するのが扱いがラク。

/* EUC-JPからSJISに変換 */
$str = mb_convert_encoding($str, "SJIS", "EUC-JP");
/* SJISからにEUC-JP変換 */
$str = mb_convert_encoding($str, "EUC-JP", "SJIS");
0604nobodyさん02/10/28 04:19ID:RrSU6wqc
掲示板を作って今まで使っていたのですが、
フォームから送る値に「+」を含むと、
それが空白になってしまうことが分かりました。
以下のテスト用ファイルtest.phpでテストしても、
やはり空白になります。

<?php
echo $_GET["var"];
?>
<form method=get action="test.php">
<input type=hidden name="var" value="test+test">
<input type=submit value="go">
</form>

これはどうすればいいのでしょうか?
0605nobodyさん02/10/28 04:34ID:eMSdzrbE
みなさんmail()でメール送信すると
本文は改行から始まりません?

mb_send_mail()だと先頭に改行は付かないんですが、
mail()でも改行から始まらないようにするのはムリですか?
0606nobodyさん02/10/28 05:08ID:???
%2B
0607nobodyさん02/10/28 11:41ID:???
>>604
しっかりtest+testと表示されますた。
>>605
mail()使ってますが、そんな現象は起こっていません。

PHP Version 4.1.2
■ このスレッドは過去ログ倉庫に格納されています