【PHP】質問スレッドpart27【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
05/03/03 22:41:23ID:???・新規質問の方は上げてください。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-10辺り
0455451
2005/04/03(日) 19:45:30ID:rv9qNWYeんー、PHPのサイトみたらnmb_eregiかmb_eregは、まだ実験的ってあるので、避けたいところでして・・・
>>453さん
んー、しらべてみたところ、
if (preg_match("/^[ァ-ヶ・−]+$/"/",$aParam["company_name_kana"]))
かな、と思ったのですが、実行してみたら、だめでした・・・_| ̄|○
>>454さん
「preg_*だとUTF8使えば可能」ってのは、UTF8を使わないとダメってことでしょか?
あるいはEUCでも可能な方法はあるのでしょうか・・・
恐縮ですが、よろしくお願いします。
0456nobodyさん
2005/04/03(日) 21:22:06ID:???Windows版PHPでphp-ts.dll他を入れ替えてないというオチでは?
>>447
検索だとそのサイトがどうも上位に来るようなんだけど、マニュアルが古いから
ちゃんと本家のマニュアルをベースにした方が良いよ。
あと手元にアーカイブをコピーしてそっち見るとか。
http://jp.php.net/manual/ja/
0457nobodyさん
2005/04/03(日) 21:47:00ID:wg0bg1Ve2ch
という2つのフォルダが同じディレクトリ内にあるとして、
2chのindex.phpからhogehogeのindex.phpを指定する場合
<?php chdir("../hogehoge/"); include("index.php"); ?>
と記述するとエラーが出てしまうんですが、どこが間違っていますか?
0458nobodyさん
2005/04/03(日) 21:55:15ID:???<? include("../hogehoge/index.php") ?>
と書かないの?
0459nobodyさん
2005/04/03(日) 22:02:23ID:???マニュアルの記述は古いので現在は実験的ステータスってのは英語版のマニュアルには無い。
preg_*はUTF8でないと正確に日本語を扱うことは出来ない。
0460457
2005/04/03(日) 22:08:12ID:???以前その書き方をした時にエラーが出て、457のような書き方を知ったんですよ。。
でも今それを試してみたらできました。
よくわかんないけど解決しました。
ありがとうございました。
0461nobodyさん
2005/04/03(日) 22:39:13ID:???その環境のセーフモードに関わるあたりの設定か、
その当時の(PHPのセーフモード絡み)バグかと思われ。
# セーフモード絡みのバグは結構多い。
0462nobodyさん
2005/04/04(月) 00:28:53ID:/X5zJ+6Whttp://www.itmedia.co.jp/enterprise/articles/0504/03/news010.html
0463nobodyさん
2005/04/04(月) 00:53:24ID:???マニュアル読んだけどポンとこないいだなぁ
どんなとき使うの?
0464nobodyさん
2005/04/04(月) 01:25:35ID:???ob_start();
curl_exec($ch);
$str = ob_get_contents();
ob_end_clean();
0465nobodyさん
2005/04/04(月) 02:28:34ID:???0466nobodyさん
2005/04/04(月) 02:51:56ID:???curl_exec()はphpinfo()等といっしょで、実行すると(通常は)標準出力に垂れ流しちゃうから、
こうやってバッファリングでキャッチするしか、その出力を変数として取得できないんよ。
0467nobodyさん
2005/04/04(月) 04:10:19ID:???こんな使い方で着ますか?
header("location...."の出力の前になにか出力されていると
エラーになるけどob_start()使えば大丈夫?
0468nobodyさん
2005/04/04(月) 04:21:27ID:???header前に出力してしまうような仕様を見直したほうがいいぞ。
不意に出力してしまうのを回避ってなら、ob_start()前に出力してしまう可能性もあるわけだし。
あと、某スレへの誤爆してしまったものだがw
> 881 名前:nobodyさん[] 投稿日:2005/04/04(月) 03:08:04 ID:Es2o76gF
> PEARのエラーハンドリングもob_start()でphpが出す
> エラーメッセージをそのまま出力しないように取り込んでるね。
0469nobodyさん
2005/04/04(月) 09:34:12ID:???$_SERVER['REMOTE_HOST']
$_SERVER['PATH_INFO']
$_SERVER['CONTENT_TYPE']
$_SERVER['HTTPS']
$_SERVER['HTTP_RANGE']
$_SERVER['HTTP_IF_NONE_MATCH']
$_SERVER['HTTP_IF_MATCH']
$_SERVER['HTTP_IF_UNMODIFIED_SINCE']
$_SERVER['HTTP_IF_MODIFIED_SINCE']
の様な記述を見たのですが、cliでもApacheモジュールでも値が取得できません。
これらの値はどういうときにセットされるんですかね?
0470nobodyさん
2005/04/04(月) 09:59:45ID:???CLIは無理だろ。サーバモジュール版で取れない理由は判らんが、
サーバ側がセットしてないからかな。mod_envを入れてないとか。
0471447
2005/04/04(月) 10:43:04ID:???わざわざありがとうございます!ここの板の方は親切な方ばかりで。
本家のマニュアルを参考にしてPHPを使いこなせるように精進します。
0472nobodyさん
2005/04/04(月) 12:54:34ID:???0473nobodyさん
2005/04/04(月) 15:50:32ID:8msdlW8Q0474469
2005/04/04(月) 16:14:02ID:???> >>469
> CLIは無理だろ。
いや分かってますが、一応お約束ということで確認しました。
Apacheのhttpd.confではmod_envが有効になっていますが、
$_SERVER['HTTPS']を表示させようとするとUndefined indexが
返ってくるので有効になってないということですかね。
0475nobodyさん
2005/04/04(月) 16:21:11ID:???$_SERVER['REMOTE_HOST']
Apache の設定がHostnameLookups Offになってるとセットされない
$_SERVER['PATH_INFO']
URLにPath infoが含まれないとセットされない
$_SERVER['CONTENT_TYPE']
GETの場合はセットされない
$_SERVER['HTTPS']
httpsじゃないとセットされない
$_SERVER['HTTP_RANGE']
$_SERVER['HTTP_IF_NONE_MATCH']
$_SERVER['HTTP_IF_MATCH']
$_SERVER['HTTP_IF_UNMODIFIED_SINCE']
$_SERVER['HTTP_IF_MODIFIED_SINCE']
ユーザーエージェントが送らないとセットされない
0476nobodyさん
2005/04/04(月) 16:22:11ID:???あったとしてもSSL関連のっぽいし
print_r($_SERVER)してみたら
0477469
2005/04/04(月) 17:01:34ID:???おお、ありがとうございます。
まさに解説のとおりでした。
>>476
HTTP.phpでは、
$protocol = isset($_SERVER['HTTPS']) ? 'https' : 'http';
みたいな感じで使ってました。
何がしたかったのかというと、$_SERVER と getenv が等価なのかを
知りたかったのです。
完全に等価なら getenv に書き換えて、php.iniの
variables_order = "EGPCS" を "GPC" にしてメモリを節約しようかと。
foreach ($_SERVER as $key => $value) {
echo $key .":". $_SERVER[$key] ."=>". getenv($key) ."</ br>";
}
でチェックすると、getenv には 'PHP_SELF' はセットされていないようですね。
PATH_INFO は使わないことにして、getenv('SCRIPT_NAME') で代替するかな。
0478nobodyさん
2005/04/04(月) 17:42:57ID:???例えばtest.phpがあったとして
そのソースの中にtest.phpを読み込む記述をしたら無限ループしちゃうの?
0479nobodyさん
2005/04/04(月) 17:46:46ID:???0482nobodyさん
2005/04/04(月) 18:29:31ID:???2chに書き込んでいるマシンにPHPを入れて試せばいいやん。
別にApache入れたりせんでもコマンドラインで試せるでしょ。
0483nobodyさん
2005/04/04(月) 19:41:50ID:???0484nobodyさん
2005/04/04(月) 20:01:18ID:???0486nobodyさん
2005/04/05(火) 00:26:42ID:???以下のxmlスクリプトをsimpleXML関数で読み込み、
<root>
<p>ああ</p>
<p>いい</p>
<comment>アア</comment>
<p>うう</p>
<comment>イイ</comment>
</root>
これを上から順に、以下のように出力したいのですが、どうすればいいのでしょうか?
ああ
いい
アア
うう
イイ
0487nobodyさん
2005/04/05(火) 09:06:53ID:???fsockopen()みたいにHTTPヘッダを自分で用意することはできないのでしょうか?
もしくはfsockopen()でソケット接続ときに上の関数で取得する方法
またfilesize()を使ってからgetimagesize()使うと
URLに2回アクセスすることになるのですが、
1回のアクセスで同時に取得することは可能ですか?
分かる方がいたら教えてください。
0488nobodyさん
2005/04/05(火) 09:29:10ID:???リモートのファイルを取得してローカルの/tmpに保存。
そのファイルに対して各関数を適用すればいいんじゃないの?
httpのheadリクエストでも取得できる場合もあるけども。
0489U N S E T( ) ◆g9jPPQs3mo
2005/04/05(火) 10:07:51ID:???俺はチャレンジャーなのでやってみた。
winxpsp2
コードは下記
<?php
include "incl.php";
?>
結果はページは表示されません、っとでます。
ちょっと期待してたのに詰まんないので、下記もやってみる。
<?php
echo "a";
include "incl.php";
?>
一緒だったorz
0490nobodyさん
2005/04/05(火) 10:44:32ID:???0491nobodyさん
2005/04/05(火) 11:21:06ID:???0492nobodyさん
2005/04/05(火) 11:22:29ID:???実は俺もやった
Windows のApache2.0 moduleで
Parent: child process exited with status 3221225477 -- Restarting.
>>490
Apacheの子プロセスがこけたので何も帰ってきません
0493nobodyさん
2005/04/05(火) 13:16:47ID:FyaY+6Ab改行コードだけを取り除き、ファイルに保存しようとしているのだが
$str = nl2br(trim($_POST['str']));
$str = str_replace("\n", "", $str);
$str = str_replace("\r\n", "", $str);
$str = str_replace("\r", "", $str);
改行が取れない、nl2brを行わなければ問題なく改行コードを
除去できるのだが、何故?
0495nobodyさん
2005/04/05(火) 13:48:01ID:???PHP Warning: Unknown(): Unable to load dynamic library
のエラーが出ます。普通に起動した場合はちゃんと動きます。
どんな理由が考えられるでしょうか。どなたかお助けを・・・。
0499nobodyさん
2005/04/05(火) 14:22:34ID:???返信ありがとうございます。
そちらのほうが効率も良さそうなので早速使ってみました。
調子に乗って悪いのですが
受け取るデータの量を制限したいので↓みたいにして動作はするのですが
while(!feof($fp)){
$data .= fgets($fp, 128);
if(strlen($data) > 1048576){
fclose($fp);
echo "IMB超えちゃった";
break;
die;
}
}
ループ毎にstrlenで数えて判定をだすというのは効率が悪い気がするので
うまくチェックする方法はないですか?
0500499
2005/04/05(火) 14:23:59ID:???0501nobodyさん
2005/04/05(火) 15:24:53ID:???ありがとうございます。
php自体は動くようになったのですが、今度はpostgresが動かない。
configureの確認かな・・・。
0502nobodyさん
2005/04/05(火) 15:54:20ID:???postgres単独では動作してるの?
PHP + PostgreSQL
http://pc8.2ch.net/test/read.cgi/php/983128806/
こんなのもあるよ。
0503nobodyさん
2005/04/05(火) 16:42:18ID:???phpinfo()で表示される
Thread Safety disabled
ってPHPのこといってるんでしょうか。
0504nobodyさん
2005/04/05(火) 17:05:06ID:???Yes.
Zend Thread Safety(ZTS)
--enable-maintainer-zts
--enable-roxen-zts
0505491
2005/04/05(火) 19:04:41ID:???どーもです。
<?php
ini_set('error_reporting', E_NOTICE);
echo $a[0];
echo $b;
?>
としたら
Warning: Undefined variable: a in /home/miyakegumi/public_html/wat/php/test.php on line 3
Warning: Undefined variable: b in /home/miyakegumi/public_html/wat/php/test.php on line 4
と吐いてくれました。
代入は検出できませんが、これだけでもあると助かります。
0506nobodyさん
2005/04/06(水) 07:26:06ID:nH8oVa9B0508nobodyさん
2005/04/06(水) 07:53:21ID:???ありがとう。
このオプションを付けてメイクしApache2と組み合わせれば、スレッドセーフな
PHPが利用できるということですか?
今はApache 1.3の環境しかないので週末にでも試してみます。
0510nobodyさん
2005/04/06(水) 10:46:50ID:gc7DD2Cw'<mojiretsu>moji"retsu</mojiretsu>'
みたいなかんじに、その文字列内に実体参照が入っています。
これを xml_parse_into_struct() に喰わせてやると、
実体参照がことごとく消えてしまうのですが、
これはそういう仕様なんでしょうか?
'MOJIRETSU' => 'moji"retsu'
みたいに取り出すにはどうすればいいでしょうか?
PHPは5.0.3を使っています。
0511nobodyさん
2005/04/06(水) 10:57:56ID:???'<mojiretsu>moji"retsu</mojiretsu>'
0512nobodyさん
2005/04/06(水) 11:18:54ID:???><mojiretsu>moji"retsu</mojiretsu>
そもそも、これはXMLの仕様で許されるのか?
CDATAセクションでもなしに。
0514nobodyさん
2005/04/06(水) 12:04:20ID:???<?php
$str = '<mojiretsu>moji&"retsu</mojiretsu>';
$p = xml_parser_create();
xml_parse_into_struct($p,$str,$val,$idx);
xml_parser_free($p);
var_dump($idx);
var_dump($val);
?>
PHP4.3.9(Win)もPHP5.0.4(Win)でも
array(1) {
["MOJIRETSU"]=>
array(1) {
[0]=>
int(0)
}
}
array(1) {
[0]=>
array(4) {
["tag"]=>
string(9) "MOJIRETSU"
["type"]=>
string(8) "complete"
["level"]=>
int(1)
["value"]=>
string(10) "moji"retsu"
}
}
0516nobodyさん
2005/04/06(水) 15:51:09ID:???addslashesみたいなのキボン
0517516
2005/04/06(水) 15:52:37ID:???空白(半角スペース)を&nbspに変更する関数はありますか?
0518nobodyさん
2005/04/06(水) 16:27:24ID:???0519nobodyさん
2005/04/06(水) 16:32:27ID:???どうもです。
それをしてもこうなるんですよね。
バージョンの問題か、OSの問題か、php.iniあたりかということですね。
array(1) {
[0]=>
array(4) {
["tag"]=>
string(9) "MOJIRETSU"
["type"]=>
string(8) "complete"
["level"]=>
int(1)
["value"]=>
string(9) "mojiretsu"
}
}
0520nobodyさん
2005/04/06(水) 17:23:20ID:???Linuxでも試してみたけど、
-PHP4.3.10(Linux)/EXPAT 1.95.6
-PHP4.3.10(Linux)/EXPAT 1.95.7
-PHP4.3.11(Windows)/EXPAT 1.95.6
-PHP5.0.4(Windows)/libxml2 2.6.11
全部結果は同様にちゃんと出てる。
0521nobodyさん
2005/04/06(水) 17:31:41ID:???つーか、changelogみたら、PHP5.0.3の
Bug#31139 "XML Parser Functions" seem to drop & when parsing
http://bugs.php.net/bug.php?id=31139
そのものじゃないのか?
0522nobodyさん
2005/04/06(水) 17:38:27ID:???やっぱ>>521だわ。
-PHP5.0.3(Windows)/libxml2 2.6.11で再現確認。
-PHP5.0.2(Windows)/libxml2 2.6.11では問題なし。
0523nobodyさん
2005/04/06(水) 17:44:55ID:???選択名<BR>
<select name="数字">
<option value="1">1
<option value="2">2
<option value="3">3
</select><BR>
<input type="submit" value="OK">
</form>
1を選択した時に1が表示出来るようにしたいのですが、***のスクリプトが
わかりません。どなたか教えて下さい。
0524nobodyさん
2005/04/06(水) 17:45:23ID:???選択名<BR>
<select name="数字">
<option value="1">1
<option value="2">2
<option value="3">3
</select><BR>
<input type="submit" value="OK">
</form>
1を選択した時に1が表示出来るようにしたいのですが、***のスクリプトが
わかりません。どなたか教えて下さい。
0525nobodyさん
2005/04/06(水) 17:59:54ID:???---------------------------------
<form action="test.php"method="post>
選択名<BR>
<select name="num">
・
・
・
---------------------------------
[test.php]
<?php
echo $_POST['num'];
?>
---------------------------------
0527nobodyさん
2005/04/06(水) 18:22:48ID:???0529nobodyさん
2005/04/06(水) 19:21:44ID:???質問の仕方が間違っていました。
<form action=www.test.com/test.php method="post">
選択名<BR>
<select name="num">
<option value="1">1
<option value="2">2
<option value="3">3
</select><BR>
<input type="submit" value="OK">
</form>
test.php
<?php
if ( $_POST["num"] == "1" ) {
header("LOCATION:http://www.test.com/ 1.html");
}elseif ( $_POST["num"] == "2" ) {
header("LOCATION:http://www .test.com/2.html");
}elseif ( $_POST["num"] == "3" ) {
header("LOCATION:http://www.test.com/ 3.html");
}else {
header("LOCATION: form.html");
}
?>
あっていますか?
0530nobodyさん
2005/04/06(水) 20:30:31ID:???0531nobodyさん
2005/04/06(水) 20:52:36ID:???間違っています
どこかのブラウザでどこかの鯖なら間違って動く事もあるかもしれないが。
ってかそれだけの事だけだったらJS使えば?
0533nobodyさん
2005/04/07(木) 00:22:36ID:???htmlのformで注文情報をpostして値をチェック
入力不適切なところがあれば前のページへ戻すのですが、
そのときに値が消えてしまいます。
どうすればよろしいのでしょうか。
0535nobodyさん
2005/04/07(木) 00:48:26ID:???了解しました。
0536nobodyさん
2005/04/07(木) 00:48:40ID:???<input type="text" name="hoge" value="$_REQUEST['hoge']">
0539nobodyさん
2005/04/07(木) 08:02:27ID:???0540nobodyさん
2005/04/07(木) 08:17:27ID:???ぐらいしてるだろ。
0541nobodyさん
2005/04/07(木) 09:18:19ID:???0542nobodyさん
2005/04/07(木) 09:35:15ID:???そりゃ悪さする奴が悪いが、悪さされたことにより
それが誰かに被害を与えれば、被害を与えた奴が(も)悪い。
ある程度同情はするが免責はせんよ、自分が被害者なら。
0543nobodyさん
2005/04/07(木) 15:07:02ID:???in filename on line 537
というエラーでチュンとも鳴かないスクリプトに困っています。
該当行は、
if(!isset($_POST['datalist'])) { // <----- ココ
return;
}
で、何が悪いのか判りません。
$_POST['datalist'] を、$_POST[datalist] にすると、とりあえずその行でのエラーは消えますが
また次に出てくる配列の部分でエラーになり、配列キーの ' ' を全部消すと、
今度はファイルの最終行で「$が余計です」というエラーになります;;
" " でくくった配列は一つもありません。環境は、PHP4.3.9+Apache2.0 です。
何か思いつく方おられましたら教えてください。よろしくお願いいたします。
0544nobodyさん
2005/04/07(木) 16:07:19ID:???0545nobodyさん
2005/04/07(木) 16:07:57ID:???鳴かぬならぶち殺してしまえ、そのスクリプト。
APCとかZendのプリコンパイラとか最適化ツール使ってない?
0547nobodyさん
2005/04/07(木) 16:44:56ID:???次のようなスクリプトでT_ENCAPSED_AND_WHITESPACE部分を抽出してみるとか。
$source = file_get_contents("test2.php");
$tokens = token_get_all($source);
foreach($tokens as $token){
if(is_string($token)){
// echo $token."<br>\n";
}else{
list($id,$text) = $token;
print $text."<br>\n";
if($id == T_ENCAPSED_AND_WHITESPACE){
print "[this line]".$text."[/this line]<br>\n";
}
}
}
0548nobodyさん
2005/04/07(木) 17:36:31ID:???↑これですが、Sn Uploaderのように、
下部にディスク使用量を表示させるにはどうすればよいでしょうか?
0553nobodyさん
2005/04/07(木) 18:43:53ID:???547さんに教えていただいた方法を元に虫潰しにかかりましたが、
今度は別の行でひっかかって動きません;; 想像を絶する見落としなんですかねぇ・・・
問題ないように見えるし、元は4.0.2でちゃんと動いていたものなのですが・・・・・ プンスカ
>545 業者納入なので判りませんが、フツーにしか入れてないと思います
早くしないと旧機が持っていかれてしまう;; 焦りまくりッス
愚痴スマンです。 ありがとうございました。
0554nobodyさん
2005/04/07(木) 19:38:04ID:vs0utpq/■ このスレッドは過去ログ倉庫に格納されています