【PHP】質問スレッドpart31【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/11/27(日) 00:07:12ID:eBvjdczp【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。
過去スレ、関連リンク、FAQ等>>2-10辺り
0600nobodyさん
2005/12/20(火) 18:41:02ID:???0601nobodyさん
2005/12/20(火) 18:57:00ID:???ガベージコレクションで最初の値削除されてしまってるということでしょうか。
な、なるほど。
0602nobodyさん
2005/12/20(火) 19:07:56ID:Lk6o0b9n本家に行ってもPHP5.1.1をDLするよう推奨されてて、PHP5.0.4をDL出来ないようなのですが・・・
どなたかDL出来るサイト等をご存知でしたら教えてください。
0604nobodyさん
2005/12/20(火) 19:45:29ID:???mixiとマルチポスト乙
0605nobodyさん
2005/12/20(火) 19:52:50ID:???0607nobodyさん
2005/12/20(火) 23:49:31ID:/3BtbpNS今触っているプログラムの中で
以下のようなコードがあるのですが
これはどういった意味なのでしょうか?
文脈から判断してif文のような気がしているのですが実際のところなんなのかわかりません。
$stockDiff = (isset($selectRow['STOCK']))? $CSVRow[STOCK] - $selectRow['STOCK']: 0;
0609nobodyさん
2005/12/20(火) 23:54:46ID:/3BtbpNSありがとうございます。
グ具ってみます。(^^)
0610nobodyさん
2005/12/20(火) 23:54:54ID:???if (isset($selectRow['STOCK']))
{
$stockDiff = $CSVRow[STOCK] - $selectRow['STOCK'];
}
else
{
$stockDiff = 0;
}
こんなかんじだ。
0611nobodyさん
2005/12/21(水) 00:00:16ID:/3BtbpNSありがとうございます。
そのまま使わせていただきます。
0612nobodyさん
2005/12/21(水) 00:13:08ID:???0613nobodyさん
2005/12/21(水) 02:54:53ID:???0614nobodyさん
2005/12/21(水) 11:14:58ID:uiIPgpa3Apacheを起動すると毎回
PHP Warning: Unknown(): Unable to load dynamic library './session.so' - Cannot open "./session.so" in Unknown on line 0
PHP Warning: Unknown(): Unable to load dynamic library './mysql.so' - Cannot open "./mysql.so" in Unknown on line 0
というエラーがでています。
eaccelerator.soの入っているディレクトリに上記2ファイルがあり、eaccelerator.soのファイルは読まれているようなのですが、そのほかが読まれてないようです。
php.iniで確認したところ、extension_dirは./ EnvironmentのPWDは/uar/local/etc/となっているので
session.soとmysql.soのリンクを張ってみると、今度はmysql関係のファイルが全部読まれてないらしく10KB近くのエラーログができてしまいました。
実際eaccelerator.phpを見てみると正常に稼働しているのですが、どうも気になります。
このエラーは放置してもいいのでしょうか?できれば対処法を教えてください。。
よろしくお願いします。
0616614
2005/12/21(水) 12:01:43ID:???[eaccelerator]
zend_extension="/usr/local/lib/php/20020429/eaccelerator.so"
eaccelerator.shm_size = "20"
eaccelerator.cache_dir = "/tmp/eaccelerator"
eaccelerator.enable = "1"...
を1番下に動かしてみましたが、
PHP Warning: Unknown(): Unable to load dynamic library './session.so' - Cannot open "./session.so" in Unknown on line 0
PHP Warning: Unknown(): Unable to load dynamic library './mysql.so' - Cannot open "./mysql.so" in Unknown on line 0
PHP Warning: Unknown(): Unable to load dynamic library './session.so' - Cannot open "./session.so" in Unknown on line 0
PHP Warning: Unknown(): Unable to load dynamic library './mysql.so' - Cannot open "./mysql.so" in Unknown on line 0
[Wed Dec 21 11:56:50 2005] [notice] Apache/1.3.34 (Unix) AuthMySQL/2.20 PHP/4.3.11 configured -- resuming normal operations
[Wed Dec 21 11:56:50 2005] [notice] Accept mutex: flock (Default: flock)
とでました。。
オプティマイザーはeAcceleratorしか使ってません。
0618614
2005/12/21(水) 12:23:30ID:uiIPgpa3FreeBSD 4.11を使用しています。
これがいけないんでしょうか?..
ちなみにportsからインストールしています。
0619nobodyさん
2005/12/21(水) 12:49:36ID:???FreeBSDのportsでPHPをインストールすると、
/usr/local/etc/php/extensions.ini というファイルが作られて、
session.so とか mysql.so なんかはこのファイルで追加される。
そして、Apache起動時は /usr/local/etc/php.ini を読んでから、
extensions.ini が読み込まれる。
つまり、php.ini の最後に eaccelerator.so の設定を書いても
最後に読み込まれるわけではないのよ。
よって、extensions.ini の最後に eaccelerator の設定を書くか、
extension.ini の内容を php.ini に移してファイルを消せばいい。
ただこれだと ports を更新する度に同じ作業が必要になるので、
対応策を思案中・・・
ひょっとして適当なファイル名でeacceleratorの設定だけを書いておくと
extension.ini の後に読み込まれないかなと期待してるんだけど。
0620619
2005/12/21(水) 13:00:16ID:???/usr/local/etc/php/extensions2.ini
ってファイルを作って、そこにeAcceleratorの設定を書いておくと、
php.ini → extensions.ini → extensions2.ini の順番で読み込まれた。
ファイル名のソート順でよかったもよう。
0621614
2005/12/21(水) 13:07:44ID:???一度ここのextensionを直接の場所で指定してエラーになりました。
extension.iniの最後に移してみました。
extension=session.so
extension=mysql.so
[eaccelerator]
〜〜〜〜
でやってみましたが、だめでした。。エラーの内容は変わりません。
>ひょっとして適当なファイル名でeacceleratorの設定だけを書いておくと
>extension.ini の後に読み込まれないかなと期待してるんだけど。
# これなら、phpinfo()のScan this dir for additional .ini filesの欄のフォルダに入れると起動時に読まれるっぽいです。
0622614
2005/12/21(水) 13:08:55ID:???やってみます
0623614
2005/12/21(水) 13:13:28ID:???# additional .ini files parsed
/usr/local/etc/php/extensions.ini, /usr/local/etc/php/zextension.ini
これで、きちんと読まれているようですがエラーの内容は変わりませんでした。。
0624nobodyさん
2005/12/21(水) 13:14:48ID:???分かったわよっ!別ファイルに書けばいいんでしょっ!......(アリガト)
0625619
2005/12/21(水) 13:22:09ID:???力になれなくてすまんな。
ところでeAcceleratorとPHPのバージョンは確認済みだよね?
あまり意味ないかもしれんが、うちのバージョンを書いておくね。
# php -v
PHP 5.0.5 (cli) (built: Nov 25 2005 17:25:57)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v2.0.5, Copyright (c) 1998-2004 Zend Technologies
with eAccelerator v0.9.3, Copyright (c) 2004-2004 eAccelerator, by eAccelerator
0626614
2005/12/21(水) 13:27:39ID:???#php -v
PHP Warning: Unknown(): Unable to load dynamic library './session.so' - Cannot open "./session.so" in Unknown on line 0
PHP Warning: Unknown(): Unable to load dynamic library './mysql.so' - Cannot open "./mysql.so" in Unknown on line 0
PHP 4.3.11 (cli) (built: Dec 10 2005 06:01:20)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
with eAccelerator v0.9.4-rc1, Copyright (c) 2004-2005 eAccelerator, by eAccelerator
ちなみに同じ環境(4.11と4.10の違い)の0.9.3の方はうまく動いているんです。
0.9.3に戻してやってみて、また報告します
0.9.4はまだバグが多いのかわかりませんが、eaccelerator.phpのCleanを押しても動きません。
0.9.3は正常に動作しますけどね。。
0627619
2005/12/21(水) 13:32:29ID:???> #うちのはあつかましくエラーと共に表示されました。
そりゃそうでしょう。
libraryがロードできてないのはsessionとmysqlだからね。
ところで、sessionとmysql以外のモジュールはちゃんと動作してるの(php -i で確認)?
0628147
2005/12/21(水) 13:56:56ID:N7x21G0Gphpの配列について質問があります。
前のページで
<input type="hidden" name="20051218133001" value="1">
のhtmlタグのフォーム(POST)で飛ばし、下の記述で表示させようとしましたがエラーが出てしまいます。
if($_POST['20051218133001']){
print<<<EOM
<table>
<tr>
<td valign="top">$_POST['20051218133001']<td>
</tr>
</table>
EOM;
}
エラーは
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/***/***/***.php on line 5
と出ます。
ifの後の$_POST['20051218133001']は普通に処理しているのですが、
print<<<EOMの中の$_POST['20051218133001']が引っかかっているみたいです。
試しに後者を$_POST[20051218133001]と書くと普通にエラー無く表示されます。
次に前者も$_POST[20051218133001]とするとエラーは出ないのですが
ifの条件分岐に入ってくれません。
どなたかご指導よろしくお願いします。
0629147
2005/12/21(水) 13:57:27ID:N7x21G0GサーバOSはUNIX系OSのFreeBSDを使用しているそうです。
PHP のバージョンは 4.3.10 です。
よろしくお願いします。
0630614
2005/12/21(水) 13:57:38ID:???それどころか、
session
Session Support => enabled
Registered save handlers => files user eaccelerator
Directive => Local Value => Master Value
session.auto_start => Off => Off
session.bug_compat_42 => Off => Off
session.bug_compat_warn => On => On...
mysql
MySQL Support => enabled
Active Persistent Links => 0
Active Links => 0
Client API version => 4.0.26
MYSQL_MODULE_TYPE => external
MYSQL_SOCKET => /tmp/mysql.sock...
ときちんと動作もしています
0631nobodyさん
2005/12/21(水) 14:03:21ID:???なんかどっかで見かけたような。。
原因はヒアドキュメントの中でどこからどこまでが変数なのかが
PHPの中の人が判断できなくなっている、つーことだから、
{ } を使って明確にしてあげればよい。
{$_POST['20051218133001']}
0632619
2005/12/21(水) 14:38:45ID:???お手上げです。
eAcceleratorの読み込みをやめて Warning が出てこなくなるなら eAcceleratorの
せいだろうし、そうじゃないなら session.so と mysql.so に問題があるんじゃないかと。
後は error_reporting = E_ALL にしたらもっと詳しいメッセージが出てこないかな?
0633nobodyさん
2005/12/21(水) 14:40:00ID:ybikX0hyphpのUTF-8を指定するには、どうすればいいですか?
htmlの場合は、
.htaccessに
AddType "text/html; charset=UTF-8" html
ですが、
phpの場合は、
AddType "text/html; charset=UTF-8" php
とするだけで良いのでしょうか?
サーバは、xreaです。
よろしくお願いします。
0634nobodyさん
2005/12/21(水) 15:27:38ID:???文字列(ヒアドキュメントを含む)の中で配列変数を書くときは
{$変数名['キー']} と書かなきゃいけないことは
マニュアルに明記されてる。
II言語リファレンス 6章「型」 参照のこと。
0635nobodyさん
2005/12/21(水) 15:29:50ID:???<?php
header("Content-type: text/html; charset=utf-8");
echo "Hello world";
?>
0636nobodyさん
2005/12/21(水) 15:31:31ID:???それは違うんでねーの。
>>633
とにかくここ嫁。
http://jp2.php.net/manual/ja/ref.mbstring.php
0637nobodyさん
2005/12/21(水) 15:35:07ID:???タイトルに404などの文字が含まれているとかで判定するなんてことはないですよね。
0638nobodyさん
2005/12/21(水) 15:35:47ID:???iniのdefault_charsetがクリアされてなきゃデフォで送信されるけど
0642nobodyさん
2005/12/21(水) 15:55:24ID:???php5なら
get_headers
0644nobodyさん
2005/12/21(水) 18:44:32ID:???0645nobodyさん
2005/12/21(水) 19:22:32ID:???どのような正規表現を書けばよいですか?
index.html
top.htm
frame.htm
top.jpeg
icon.gif
1.css
2.css
例えば↑のファイルがある場合、
↓の結果を返すようにしたいのです。
.html
.htm
.jpeg
.css
0646nobodyさん
2005/12/21(水) 19:24:57ID:???0647nobodyさん
2005/12/21(水) 19:59:31ID:???0648614
2005/12/21(水) 21:34:35ID:???eAccerelator0.9.4-rc1 -> 0.9.3
にしたら正常通り動きました。
いろいろありがとうございました。
0650nobodyさん
2005/12/22(木) 01:56:27ID:???while($file = readdir($dp)) {
if(preg_match('/(\.[^.]+)$/', $file, $match)) $list[$match[1]] = '';
}
$extlist = array_keys($list);
0651nobodyさん
2005/12/22(木) 08:20:36ID:???正規表現使わなくても
$parts = pathinfo($file);
$ext = ".".$parts['extension'];
$pos = strrpos($file, ".");
$ext = ".".substr($file, -$pos);
0653nobodyさん
2005/12/22(木) 10:01:11ID:???「.」とか「..」とかのディレクトリ名を除外した方がいいかも。
あと、Windowsユーザには馴染みがないかもしれないが、
「.htaccess」みたいにファイル名が「.」から始まる場合は
普通はこれは拡張子とは言わない。
頭1文字目が「.」なファイル名を最初に除外しとくと
この辺が一発で解決するな。
0655nobodyさん
2005/12/22(木) 12:23:30ID:???0656nobodyさん
2005/12/22(木) 14:05:22ID:lB13zr56おまえらならどれくらい時間必要?
0658nobodyさん
2005/12/22(木) 14:23:55ID:???面白いけど、これはデザインの問題か
0659nobodyさん
2005/12/22(木) 14:33:57ID:???0660nobodyさん
2005/12/22(木) 14:57:25ID:???データマイニングとかやろうとしたら恐ろしい時間が。
>>658
萌え系って機能的には他のより劣ってるよな。
>>659
でじこは萌えない。
0662nobodyさん
2005/12/22(木) 15:30:25ID:???世界的に需要はあるだろうな。
ただゲームと同じで、日本では萌え=漫画、エロからはみ出せないから、
韓国人が先にやりそう
0663nobodyさん
2005/12/22(木) 15:59:47ID:???0664nobodyさん
2005/12/22(木) 18:53:21ID:8W5z4hv+ignore_user_abort(0) で終了されたときに、実行したい処理があるんです。
0665nobodyさん
2005/12/22(木) 19:00:27ID:???C言語に詳しくないのだけど、デストラクタのこと?
つ ttp://www.php.net/manual/ja/language.oop5.decon.php
0666nobodyさん
2005/12/22(木) 19:01:34ID:???0667nobodyさん
2005/12/22(木) 19:04:59ID:???面白そうな関数だな。
0668664
2005/12/22(木) 19:16:33ID:???解決しそうです。
0669nobodyさん
2005/12/22(木) 19:34:14ID:???<html>
<?php
if ( ) {
echo "テスト1<br>";
} else {
echo "テスト2<br>";
exit;
}
echo "テスト3<br>";
?>
</html>
上記のような場合 if が真のときは期待通りの出力をしてくれるのですが、
偽のときは exit; 以降が出力されません。(当たり前だと思いますが)
<?php ?> から抜け出し、</html>まで出力させるにはどうすれば良いでしょうか?
Googleなどで検索しまくったけど分かりませんでした。お願いします。
0670nobodyさん
2005/12/22(木) 19:37:10ID:???0671669
2005/12/22(木) 19:49:24ID:fg4VrG6aexit; なくしたらテスト3も出力されますよね?
関数のように return; でも駄目だろうし(元々用途が違うと思うけど)
真の時
<html>
テスト1<br>テスト3<br>
</html>
偽の時
<html>
テスト2<br>
これを</html>(正確には ?> 以降)まで出力させるにはどうすれば。
0672nobodyさん
2005/12/22(木) 19:57:44ID:???テスト3が if()条件に左右されるものなら、
テスト1と同じ if() { } の中に含めるか、
テスト3の部分で 再度if() すればいいのでは?
0673nobodyさん
2005/12/22(木) 19:59:08ID:???<html>
<?php
if ( ) {
echo "テスト1<br>";
echo "テスト3<br>";
} else {
echo "テスト2<br>";
exit;
}
?>
</html>
0674nobodyさん
2005/12/22(木) 19:59:17ID:wNhRz1jC0675nobodyさん
2005/12/22(木) 19:59:31ID:lB13zr56ここから山田と太郎や
山田と次郎を抜き取って変数に入れるグッドなアイデア(または関数)を
教えてください。
0678nobodyさん
2005/12/22(木) 20:13:39ID:???0679nobodyさん
2005/12/22(木) 20:18:13ID:01Hk6ZHq0680669
2005/12/22(木) 20:21:23ID:fg4VrG6a実際には条件式が多数にあり、その中のいろんな場所でexit;を使用しています。
主にエラーの時にエラー文を出力して exit; させていまして
フォームに入力されたデータが全て正しいとき(テスト3の場所に該当する)
MySQL接続して処理などをしています。
エラー文を function error() {} 等でまとめて処理する方法も考えましたが
error処理の最後で exit; させると結局同じだし・・・
0681nobodyさん
2005/12/22(木) 21:04:46ID:???出力させないだけで、処理自体は走って良いのなら。
<html>
<?php
if ( ) {
echo "テスト1<br>";
} else {
echo "テスト2<br>";
$ob = ob_start();
}
echo "テスト3<br>";
if($ob) ob_end_clean()
?>
</html>
0682nobodyさん
2005/12/22(木) 21:06:21ID:???で、処理そのものが走っちゃダメなら。
<html>
<?php
if ( ) {
echo "テスト1<br>";
} else {
echo "テスト2<br>";
$err = 1;
}
if(! $err) {
echo "テスト3<br>";
}
?>
</html>
0683nobodyさん
2005/12/23(金) 11:19:05ID:???処理部分丸ごと関数にしてreturn;でいいんじゃないか?
<?php
hoge();
function hoge() {
if($error) {
return;
} else {
echo "fubafuba";
}
}
?>
</html>
0684nobodyさん
2005/12/23(金) 11:29:20ID:???PHP5だと 例外をthrowするのがおしゃれらしいけど。
0685nobodyさん
2005/12/23(金) 11:45:06ID:???0686nobodyさん
2005/12/23(金) 14:40:52ID:???主コードとデザインは分けろ。
デザインの中に入れていいロジックはデザイン切り替えのための判定だけだ。
0687nobodyさん
2005/12/23(金) 14:45:09ID:???入力処理1
入力処理2
入力処理3
入力処理4
全ての入力処理がTRUEで実行する処理
入力処理の結果に関わらず実行する処理
という構成をシンプルに書く方法の模索だと思うけどね。
それを下手にHTMLやechoで例を書いたから叩かれる。
0688nobodyさん
2005/12/23(金) 16:01:50ID:???$varから「ab.数字」という文字列を取ってくるにはどうすればいいでしょうか?
(この場合、ab.0です)
正規表現で preg_grep("ab.[0-9]", $var);
としたいところですが、.が正規表現として認識されてしまい、
abc0まで取得してしまいますよね?
正規表現にもエスケープとかあるのでしょうか?
0689nobodyさん
2005/12/23(金) 16:06:51ID:???0690nobodyさん
2005/12/23(金) 16:09:31ID:???正規表現なのは"/ab[0-9]/"側であって、$var側は関係ない。
正規表現のエスケープ方法もあるが、この質問はそれ以前に理解が足りてない。
0691690
2005/12/23(金) 16:12:23ID:???あと「ab.」の部分が可変で何が入ってくるか分からない、みたいな場合は、
preg_match("/".preg_quote($str)."[0-9]/", $var)
とすることで自動エスケープさせられる。
0693nobodyさん
2005/12/23(金) 17:56:59ID:???PHPの話じゃないし。
0694nobodyさん
2005/12/23(金) 18:02:44ID:???{if $var}○{else}×{/if}
とかやる場合は、どうするの?
設定ファイルに
v1 = '○'
v2 = '×'
とかやっておいて、PHP側で代入しておけばいいの?
ループ処理はどうするの?
パーツごとにテンプレートを分離して処理するの?
分岐とループはHTMLテンプレートには入っても仕方ないと思うけどねえ。演算なんかは予め処理しておくべきだろうけど。
0695nobodyさん
2005/12/23(金) 18:22:25ID:???> {if $var}○{else}×{/if}
> とかやる場合は、どうするの?
それが表示の切り替えに必要ならあっていいし、逆に表示のためのロジックが
主プログラム側に入り込んでるのも間違ってると思うな。
当然、表示のためのifやループはデザイン側に入ってて然るべきかと。
「表示」と「処理」の役割分担が分かってればレイヤー分けに迷わないんじゃ?
>>680はHTML表示の途中でDB接続の有無を切り替えてたりするのがおかしい。
0696nobodyさん
2005/12/24(土) 15:28:41ID:???私は、環境構築サイドの人間なのですが、
セキュリティ担当の部署から環境をなるべく
変更をされるのを好ましく思われないので
大きな脆弱性がでない限り環境を変更しない(UPDATEをしない)
環境が必要となっております。
PHP4とPHP5とPEARの導入等も考慮した場合
WebProgの方々から見た場合Verはいくつが妥当でしょか?
0697nobodyさん
2005/12/24(土) 15:47:08ID:???それはバージョンとは関係ないような...
セキュリティ担当が言うのはちまちましたセキュリティパッチなんて
当てたくねーよってこと? それとも、バージョンのメジャー番号が
変わるようなアップデートは運用ポリシー上望ましくないってこと?
前者ならそんな会社ヤヴァイし、後者ならセキュリティパッチを
ちゃんと後方互換性とか考えて作るベンダを選ぶ方が大事なのでは。
0699nobodyさん
2005/12/24(土) 16:45:45ID:???好ましく思わないのが開発担当ならまだ分かるがセキュリティ担当?
だったらPHPの脆弱性なんてマイナーバージョンが3つも上がれば山ほど出てくるから、
ほとんど毎回アップデートしないと意味ないと思うが。
PHPを大雑把にアップデートしないってのは、WindowsUpdateをこまめにかけずに
SPが出てくるまで待ってるのに等しい。
ユーザ側ならともかくセキュリティ担当がそれじゃダメだろ。
0700nobodyさん
2005/12/24(土) 20:21:14ID:???アパッチのバージョンアップどころの騒ぎじゃない。
■ このスレッドは過去ログ倉庫に格納されています