【PHP】質問スレッドpart27【php】
レス数が950を超えています。1000を超えると書き込みができなくなります。
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辺り
0876nobodyさん
2005/04/25(月) 20:12:26ID:???0877nobodyさん
2005/04/26(火) 00:51:31ID:2lFfU82SWarning: file(http://xxx/top.html): failed to open stream:
Connection timed out in /test.php on line 71
とタイムアウトが出ます。
URLをIEに貼り付けると普通に開くことが出来ます。
file_get_contentsで取得できないページってサーバ側で環境変数の
確認など行っているのですか?
0879nobodyさん
2005/04/26(火) 03:05:53ID:2lFfU82Sおぉ!それっぽい。
どうもです。
DNSには問題ないはずなのに。。。
何が駄目なんだ〜
試しのwindows環境では取得できたのにLinuxで動かすと駄目だ。
0881nobodyさん
2005/04/26(火) 09:57:49ID:???$t = tempnam(".", "abcdefgh");
ってやるとprefixが3文字までしか有効にならないのは仕様?
0882nobodyさん
2005/04/26(火) 10:57:06ID:???php-4.3.11/main/php_open_temporary_file.c
を見てみると
winではGetTempFileName()を使っている。この関数はprefix先頭3文字しか使わないようだ
win以外ではmktemp()を使っている。こちらにはそういう制限はない
というわけでwinでは仕様
0883nobodyさん
2005/04/26(火) 14:34:58ID:W1jHtFGJしかしPHP5でエラーが出て困っています。是非知恵を貸してください。
IIS上ではPHP正常稼働で、MySQLを認識&動作しますが、Apach側では
〜php_mysql.dll-指定されたモジュールが見つかりません
と言われ、MySQLを認識してくれません(鯖とPHP自体は動作します)
しかし、モジュール全般が認識しないのではないらしく、mbstringの方は認識しています。
設定ファイル(PHP.INI)はそれぞれ用意してみたのですがそれでも同じ結果です。
もちろん、PHP_MYSQL.DLLファイルは存在します(同設定ファイル使うとIISで動作する)
これらの現象を治す為に何か注意すべき点や設定変更など心当たりがありましたら是非教えてください。お願いします。
IIS6,Apach2,Mysql4.1
0884nobodyさん
2005/04/26(火) 14:35:47ID:???0886nobodyさん
2005/04/26(火) 22:33:25ID:???0888nobodyさん
2005/04/26(火) 22:49:47ID:???マニュアルでは
>設定オプションは、スクリプトの実行中、新し い値を保持し、スクリプト終了時に元の値へ戻されます。
と記述されているのですが、スクリプト実行中というのは具体的にどういった範囲なのでしょうか。
セッションなどと同じようにブラウザが終了するまで値が保持されているものなのでしょうか。
0889nobodyさん
2005/04/26(火) 23:00:48ID:???厳密に言うと違うというか例外もあるだろうけど、
あなたの感覚にあわせると概ね1ページ表示されたら元に戻る感じ。
0890nobodyさん
2005/04/26(火) 23:00:52ID:???0891890
2005/04/26(火) 23:01:44ID:???0893888
2005/04/26(火) 23:08:57ID:???サーバにPEARのパッケージが無い場合とか、
自分のpublic_htmlの中にPEARをインストールした場合、
既存のシステムとかだとPEARを使ってる部分でパスが通ってないから、
ini_setを使えばと思っていたのですが、
こうなると、結局はPEAR使ってる部分のパスを全部書き換えるか、
その前にini_setを追加しないといけないから、手間は一緒という事ですね。
PEARだけでなく、Smartyや各種フレームワークでもそうなのですが、
鯖で用意されていない場合、自分のHP領域にインストールした場合、
皆さんどうしてるんですかね。
0894nobodyさん
2005/04/26(火) 23:19:26ID:???最初のページでini_set、次のページでini_getしてみれば、聞くまでもないと
思うんだが、なぜしないんだろ?
0895888
2005/04/26(火) 23:29:50ID:???申し訳無い。
今、出張中でインターネットとPCが付いてる部屋なんだけど、
さすがに開発環境は無くて。
PHPが使える無料鯖とかも申し込みしてなくて確認出来ないんです。
0896nobodyさん
2005/04/26(火) 23:35:19ID:???いやいや。責めてるんではないので謝らなくても…
社内のプログラマ(複数)が試せば判るようなことをすぐ聞いてくるので
最近の若い人の傾向なのかなぁ、と思っただけ。
895 が若いのかどうかは知らないけど。
0897nobodyさん
2005/04/26(火) 23:37:38ID:???なぜPHPの疑問の答えが必要だったの?
0898nobodyさん
2005/04/26(火) 23:39:32ID:???答えてもらっても確認できなきゃ御礼のしようもないじゃん
0900nobodyさん
2005/04/26(火) 23:55:43ID:???それは仕様です
俺も同じ事思ってるけど、どうにもならない
俺はSEでもプログラマーでもないけど、どんな職種も同じ模様
0901888
2005/04/27(水) 00:10:45ID:???もうちょっとで30歳ですね。
若くは無いと思います。
>>897
システムの納品で出張に来ているのですが、
本日確認した所、自社サーバと言っていたのが実は外部のホスティングサーバであり、
そのサーバにシステムに必要な物が入っていなかったのです。
開発チームに連絡すると、ソースを書き換えろと指示されたのですが、
自分の中ではもっとスマートなやり方があるだろと疑問に思った訳で。
>>898
帰れるなら帰りたい・・・
>>899
なるほど。
.htaccessの中にphp_valueでinclude_pathを設定すれば良いんですね。
0902883です
2005/04/27(水) 00:48:50ID:6cV9WQUI仰るとおりのファイル(LibMysql.dllの間違いですね)をコピーすれば無事文句言われなくなりました。
助かりました。本当にありがとうございました。
0903nobodyさん
2005/04/27(水) 01:00:19ID:EFQX6yg2ありがとうございます。
特定のURLだけ駄目みたいです。
因みに
http://www.citibank.co.jp/invest/top.html
を取得しようと試みて失敗します。
相手鯖でICMP系が弾かれる設定になってるようです。
0904nobodyさん
2005/04/27(水) 01:26:19ID:???phpスクリプトじゃなくて、wgetで試してみたらどうなるか?
ネットワーク環境がわからないのだけど、どの手段でも
特定のURLだけダメってことなら
Path MTU Discovery 問題辺りじゃね?
0905nobodyさん
2005/04/27(水) 03:02:35ID:EFQX6yg2「Path MTU Discovery」メモメモ
�dクス。設定してみます。
現状↓
# wget http://www.google.com
--03:14:54-- http://www.google.com/
=> `index.html'
Resolving www.google.com... done.
Connecting to www.google.com[66.102.7.104]:80... connected.
(省略・・・)
03:14:54 (2.15 MB/s) - `index.html' saved [2259]
# wget http://www.citibank.co.jp/
--03:14:57-- http://www.citibank.co.jp/
=> `index.html.1'
Resolving www.citibank.co.jp... done.
Connecting to www.citibank.co.jp[192.193.77.83]:80...
コネクトしないよ〜
0906nobodyさん
2005/04/27(水) 11:38:52ID:???citibank.co.jpのIPを見てふと思った。
TCP/IPのサブネットマスクが 255.0.0.0 とかになっていて
ローカルを探しているとか。ありえないとは思うけど
0907nobodyさん
2005/04/27(水) 12:10:47ID:???前に、本をよんでソースから4.3.10をインストールしました。
アップグレードしたいんですけど、make uninstallコマンドができない
ようです。
この場合はどうすればいいでしょうか。
0908nobodyさん
2005/04/27(水) 12:42:28ID:???ソースからインストールした後、checkinstallを走らせてパッケージを作り、
それを利用してアンインストールする。
OS何か分からないけど、用意されているパッケージを使うってのもありかもね。
0909nobodyさん
2005/04/27(水) 14:03:55ID:jTWb4pCn$var[1] = "UNNKO";
として
$var = "";
などとしても、$var[0]、$var[1]の
中身は残っているのですが、どのように
したら変数をクリアできますでしょうか。
0910909
2005/04/27(水) 14:07:48ID:???0912nobodyさん
2005/04/27(水) 14:42:28ID:r4JIiyTCphp.iniのセッションの設定でMaster Valueの値より高い数値をPHPスクリプトや、.
htaccessで設定しても、MasterValueの上限を超えられませんか?
0913912
2005/04/27(水) 14:43:58ID:r4JIiyTCsession.gc_maxlifetime
の値です。php.iniデフォルトで1440ですが、LocalはMaster以下でしか設定できませんか?
0915nobodyさん
2005/04/27(水) 15:08:03ID:???0916nobodyさん
2005/04/27(水) 15:12:44ID:???4.3.11にバージョンアップするんなら別にいいんじゃないの。
インストールパスの変更とかしなければ全部上書きされるでしょ。
PHP5にするんならゴミが残るかもしれないからアンインストールした方が良いと思うけどね。
0917nobodyさん
2005/04/27(水) 15:17:30ID:/c75FEFA例えばmysql_connect関数を
class CLASS_DB {
function Open($host, $user, $pass) {
$this->link = @mysql_connect($host, $user, $pass);
return $this->link;
}
}
というように定義して通常、mysql_connectと書くべき部分を
$c_db = new CLASS_DB();
$dbh = $c_db->Open('host', 'user', 'pass');
と書くようにするといった感じです。
利点としては
・postgres等に変更した場合等にmysql_connectの部分を変更するだけでよくなる
・DBをメンテナンスした場合等に
function Open($host, $user, $pass) {
print "DBメンテナンス中です";
}
と変更するだけでDBに接続する全ての処理の部分でコードを変更することなく
メンテナンス中ですと表示できる。
といったようにワンクッション置くことで何らかの変更があった場合に
class CLASS_DBの中を変更するだけで全て変更される事です。
0918nobodyさん
2005/04/27(水) 15:18:43ID:/c75FEFA・DBをメンテナンスした場合等に
function Open($host, $user, $pass) {
print "DBメンテナンス中です";
}
と変更するだけでDBに接続する全ての処理の部分でコードを変更することなく
メンテナンス中ですと表示できる。
といったようにワンクッション置くことで何らかの変更があった場合に
class CLASS_DBの中を変更するだけで全て変更される事です。
0920nobodyさん
2005/04/27(水) 16:11:15ID:???それにメンテ時の表示なんて、ビジネスロジックじゃなくて、
上の層で制御した方がいいんじゃね。
0921nobodyさん
2005/04/27(水) 17:05:12ID:FF8E+B0xAから順に昇順に並べ替えたりしたいんですが一般的には
どのように行うのがいいのでしょうか・・
0922nobodyさん
2005/04/27(水) 17:14:13ID:???そういう処理の事をソートと言いますが、PHPでは マニュアルの配列関数の章に
ソート用の関数が記載されています。
並べ替える処理自体を自分で作ってみたい、ということであれば、
「ソート アルゴリズム」等のキーワードでググってみると、いろいろな情報が見つかると思います。
0923921
2005/04/27(水) 18:20:50ID:FF8E+B0xわかりました。どうもありがとうございました。
0924nobodyさん
2005/04/27(水) 19:42:19ID:4osKkRFK0925nobodyさん
2005/04/27(水) 21:16:57ID:???マニュアルを検索しても出てこないです。
検索ワードだけでもいいので教えてもらえないでしょうか?
0926nobodyさん
2005/04/28(木) 00:28:42ID:J6yThIwGマニュアルに書いていた気がする。
0927nobodyさん
2005/04/28(木) 00:34:06ID:CYm47rBrトレースで外につなぎに行ってるのは確認してるので
ローカル参照ってことはないです。
以下をLinuxでPHP5.0.4、apache2.0.54環境で取得可能な方おられますか?
$url_txt = file_get_contents("http://www.citibank.co.jp/invest/top.html");
$fws = fopen("citi.log","a");
flock($fws,2); // ファイルロック
fwrite($fws,$url_txt); // ファイルの書込み
flock($fws,3); // ファイルロック解除
fclose($fws);
0930nobodyさん
2005/04/28(木) 07:58:58ID:???マニュアルにはキーは整数または文字列とある
で文字列は1連の文字(1バイト 256個の異なる文字)とある
で文字列リテラルに3種類ある
こんなこともできる
<?php
$test[<<<EOD
配列の
キー
EOD
] = '配列の値';
echo $test["配列の\r\nキー"];//Windowsなので\r\n
?>
0931nobodyさん
2005/04/28(木) 11:57:10ID:WXfImJ/O0932nobodyさん
2005/04/28(木) 12:00:04ID:WXfImJ/Oすぐに戻ってもページの有効期限切れってでてしまうんですが
直し方ありませんでしょうか?
0934nobodyさん
2005/04/28(木) 12:04:39ID:???POSTしたページにブラウザの戻るで戻ったらそうなるよ
Mozillaなんかはもう一度POSTしますかとか聞いてくるし
キャッシュもセッションも関係ないよ
0936nobodyさん
2005/04/28(木) 13:12:02ID:???PHPのソース内で使用した変数は、人の手で明示的に解放しないといつまでもメモリに蓄積され続けるんでしょうか?
それとも、あるファイルの一連の処理が終了するとメモリは解放されるのでしょうか?
ぶしつけな質問で申し訳ありません。
0937nobodyさん
2005/04/28(木) 13:17:29ID:???続けて実行されない別のスクリプト間で変数をやり取りする方法として
セッションがあって、通常はファイルに保存するし、
同時に実行するスクリプト間でのやりとりなら共有メモリって方法もあるし
まあバグでメモリが開放されないって可能性ならあるけど、
それは意図的なものじゃない
0938nobodyさん
2005/04/28(木) 13:23:19ID:???ただ単にPHPというよApacheのメモリ管理がどうなっているのかと。
通常は実行し終え、ページを出力したら解放されるものなのかどうかと。
深い意味はありません。
0939nobodyさん
2005/04/28(木) 13:37:36ID:???小出しですか?
0940nobodyさん
2005/04/28(木) 13:54:26ID:CYm47rBr早速実験どうもです。
私もwindowsでは取得出来たのですがLinuxで駄目なんですよ。。
後はLinuxのoperaでHPが見れるか実験したいです。
ここ手のエラーは初めてで・・・四苦八苦してます。。。
0941nobodyさん
2005/04/28(木) 15:41:15ID:???仕事でシステム組むとかは別にして、
PHP(+MySQL)つかってお前らってどんなシステム組んでるの?
カウンタとかBBSとかレベルなのか?
0942nobodyさん
2005/04/28(木) 15:50:28ID:???【PHP】くだらねぇ質問はここに書き込みやがれpart4
ttp://pc8.2ch.net/test/read.cgi/php/1110697712/
0943nobodyさん
2005/04/28(木) 19:02:46ID:???ありがとうございます。
日本語も可能なんですね。
今さっきgoogleでも、PHP公式マニュアルでも検索したんですが出てこない
んです。
一体どこにあるのでしょう?
0944nobodyさん
2005/04/28(木) 19:29:55ID:???配列
ttp://www.php.net/manual/ja/language.types.array.php
key は、整数 または 文字列です。 〜(略)〜 整数または文字列のインデックスを使用することができます。
文字列
ttp://www.php.net/manual/ja/language.types.string.php
PHPでは、文字は1バイトと同じです。つまり、256個の異なる文字を使用可能です
shift-jisで次のような物を実行してみれば(\無しと\ありの2ケース)、その意味が分かるかと。
$arr['ソ\'] = 'data';
print $arr['ソ\'];
0945nobodyさん
2005/04/28(木) 20:13:02ID:???ありがとん。
いつもマニュアル読むのですが、読んでもよくわからないことが多い orz...
あと検索使うと日本語が文字化けして検索できないのは私だけ?
英語のサイトだからか...欝
Firefox 1.0.3 on Fedora Core3
0946nobodyさん
2005/04/29(金) 16:06:05ID:???一度mallocしたメモリは開放せずそのまま使いますよ。
外見は藤崎、性格は虹野、夜は鏡、そんな娘
足りなくなったらremallocという実装なのですよ。
0947nobodyさん
2005/04/29(金) 16:10:37ID:???途中でパースエラーがでてしまます。コードは以下のです。
どのように修正したらよいのでしょうか?
/*$logファイルの指定行から指定行までを読み込み、整形してHTMLで返す関数*/
/*以下の3変数はすべてURLで指定するつもりです。*/
function html_diary($log , $from_number , $to_number){
$all_lines = file($log);
$chosen_lines = array();
for($count = $from_number; $count =< $to_number; $count++){
/*ここでエラーが出てしまいます*/
array_push($chosen_lines,$all_lines[$count]);
}
0948nobodyさん
2005/04/29(金) 16:11:31ID:???$words = explode("\t",$value);
echo("
<TABLE style=\"border-color:#666666; border-width:1px; border-style:solid;\" align=\"center\" cellpadding=\"2\" width=\"85%\">\n
<TBODY>\n
<TR>\n
<TD colspan=\"2\">$words[0] : words[2] by words[1]</TD>\n
</TR>\n
<TR>\n
<TD align=\"center\" valign=\"top\" width=\"47\"></TD>\n
<TD width=\"299\">words[3]</TD>\n
</TR>\n
<TR>\n
<TD></TD>\n
<TD align=\"right\"><comment></TD>\n
</TR>\n
</TBODY>\n
")
}
}
0949nobodyさん
2005/04/29(金) 16:15:16ID:???for がおかしいと思われ。
for($count = $from_number; $count =< $to_number; $count++){
↓
for($count = $from_number; $count <= $to_number; $count++){
0950947=948
2005/04/29(金) 16:18:56ID:???そんな初歩的なミスだったとは・・・w
0951nobodyさん
2005/04/29(金) 16:42:57ID:4NbFGjgpPHP4.3.10/WinXP で開発しています。
セッションIDを以下のようにして5桁にしようとしたのですが、
上手くいかず悩んでおります。
php.iniの
-------------------------------------------------------
;session.entropy_length = 16
;session.entropy_file = /dev/urandom
-------------------------------------------------------
を
-------------------------------------------------------
session.entropy_length = 5
session.entropy_file = "c:\xxx\uuidgen.exe" ※注
(※注 Windows環境の為、VC同梱の乱数生成ファイルで/dev/urandom/の代替)
-------------------------------------------------------
に変更
マニュアル・バグレポート・Googleなど一通り見たのですが
これに関する記述が見つかりませんでした。
セッションIDの桁数や文字構成でPHP運用していることに
気付かれたくないので何とかIDを変えたいのですが。。
お知恵を拝借したく、宜しくお願い致します。
0953nobodyさん
2005/04/29(金) 17:08:38ID:4NbFGjgp早速のレスありがとうございます。
そもそも渡している値(ロジック?)が違かったんですか…(^_^A;)
当方にはLinux環境がなく、できればもう一声だけ
アドバイスをお願い致しますm(_ _)m
Cygwinで/dev/urandom/を移植できることは調べたのですが、
ID生成の為だけに300MB近いハード容量を取られたくないので、
何かしらのツールや自作プログラムで代用したいと思います。
こういった方法でWindows上で /dev/urandom/ と
同様の働きをさせることはムズカシイのでしょうか…?
0954nobodyさん
2005/04/29(金) 18:03:57ID:???0955nobodyさん
2005/04/29(金) 18:08:22ID:???ファイルベースだと使える文字列が限られるから、DBと連携したら?って趣旨です。
0956nobodyさん
2005/04/29(金) 18:29:15ID:4NbFGjgp先ほどEGADSという代用ツールに出会い、使ってみたのですが、
どうも session.entropy_file では /dev/urandom/ と
同じ様に認識することはできないみたいです。
/dev/urandom/は「デバイス」という扱いだったんですね…。
(Linux初心者なので間違ってたらすみません汗)
session_set_save_handlerでのDB接続関数は既に作ってありましたので、
アドバイスいただいた通り、適当なハッシュ関数を作って
session_id(生成値)で逃げようかと思います。
>>952のヒントでとても助かりました。
ありがとうございました。
0957nobodyさん
2005/04/29(金) 21:42:30ID:s7r+/5xEunicodeで書かれたサイトの抜き取りができません
どうすればいいですか
0958nobodyさん
2005/04/29(金) 21:43:19ID:???0959nobodyさん
2005/04/29(金) 21:48:43ID:???0960nobodyさん
2005/05/02(月) 04:22:58ID:zPNJQI1Nディレクトリごとに変えることは可能でしょうか?
/pc配下では、出力コード=EUC
/mobile配下では、SJISにトランスレートする
というようなことを実現したいのです。
0963nobodyさん
2005/05/02(月) 12:17:42ID:QMo3ti9w具体的にどの関数を使用すればよいのでしょうか?
0964nobodyさん
2005/05/02(月) 13:43:21ID:???突っ込みどころ満載だな…w
ソートアルゴリズムすら聞いたことありません。
みたいな雰囲気漂ってるぞ。
君の知識じゃ無理なのは目に見えているので、
Googleの機能使え。
0965nobodyさん
2005/05/02(月) 14:01:52ID:???0966nobodyさん
2005/05/02(月) 14:06:42ID:???まずはopendirかな
0968nobodyさん
2005/05/02(月) 14:55:45ID:???検索だからソートが必須なわけでもないな。
俺もGoogleに一票。
融通が利かない面もやはりあるが、普通にブラウザで見れる範囲しか
引っかからないので、誤って見せてはいけないものまで出してしまうミスがない。
もちろんWebサーバの設定で既にミスってる場合には終わってるが。
0969963
2005/05/02(月) 18:35:48ID:QMo3ti9wmsearch使って解決しましたw
0970nobodyさん
2005/05/02(月) 21:43:58ID:uI0QKQTW0971nobodyさん
2005/05/02(月) 23:19:43ID:???本を買ってきました。
echo文でつまづきましたw
技術評論社「はじめてのPHP言語プログラミング入門」大垣靖男著
なんだけど、タイトルよく見たら、「はじめて」と「入門」が重なるのおかしくないか!?
それとも、QuickBASICで挫折した俺の頭が悪いのか!?
もうこのスレも1000近いので、大目に見てネ
0972nobodyさん
2005/05/02(月) 23:24:16ID:kmCmIsRa何処が悪いのか分かりませんorzどなたかご指摘して頂けると嬉しいです。
mysql_query("INSERT $table SET " . implode(', ', $in) . ';')
or die 'カラムを挿入できません。';
0975nobodyさん
2005/05/03(火) 02:25:12ID:???そこの改行を<BR>にかえようと思い
//$comは、フォームからの入力
$com = htmlspecialchars($com);//タグ変換
if(get_magic_quotes_gpc()) $com = stripslashes($com);//¥除去
$com = ereg_replace("\n","<BR>",$com);
と書き、ファイルに書き込んだのですが、<BR>の手前に、
改行マーク(?)が入ります。
Win付属のノートパッドでは、
・ のように表示されています。
どういう風にすれば直るんでしょうか?お助けください
レス数が950を超えています。1000を超えると書き込みができなくなります。