【PHP】下らねぇ質問はここに書き込みやがれ 34
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/12/08(金) 04:22:54ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 33
http://pc8.2ch.net/test/read.cgi/php/1164209222/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0295nobodyさん
2006/12/10(日) 06:32:55ID:???0296nobodyさん
2006/12/10(日) 08:41:10ID:???0297nobodyさん
2006/12/10(日) 09:30:36ID:???0298nobodyさん
2006/12/10(日) 09:31:38ID:???0299nobodyさん
2006/12/10(日) 10:01:43ID:???0300nobodyさん
2006/12/10(日) 10:46:37ID:???という構成なんですが、http://外部のアクセスに2秒以上かかるときに
$string_contentsにローカルを入れるためにはどうすればいいでしょうか
0301nobodyさん
2006/12/10(日) 10:49:25ID:???0302nobodyさん
2006/12/10(日) 10:49:54ID:???0303nobodyさん
2006/12/10(日) 11:04:25ID:???set_time_limit()を
〜〜〜("http://外部")set_time_limit()
この形で置けばいいでしょうか
0304nobodyさん
2006/12/10(日) 11:36:45ID:???0305nobodyさん
2006/12/10(日) 12:32:02ID:???<?php
$Cid=$_GET['cid'];
$Data=file('top.csv');
for($i=0;$i<sizeof($Data);$i++){
$line=explode(",", $Data[$i]);
if($line[任意]==$Cid){
$CatTitle=$line[任意];
break;
}
}
?>
cidで渡された値を$Cidに納めた後、
$line[0]と$Cidが同じならば、$CatTitleに$line[1]を
$line[1]と$Cidが同じならば、$CatTitleに$line[5]を
$line[3]と$Cidが同じならば、$CatTitleに$line[2]を
という風に条件を別れさせたいのですが、どうやったらよいでしょうか?
わかりにくくてすいません。
0306nobodyさん
2006/12/10(日) 12:54:07ID:???ifでもswitch caseでも使って条件分岐するしかないのでは?
空行を読んだときやexplodeした配列が4つも無かった場合の
処理を追加した方がいいね。
あと、forでまわすよりforeachで回す方が毎回sizeofしなくて
いいような気がするが、ここら辺はPHPが最適化してくれるのかな?
0307nobodyさん
2006/12/10(日) 13:54:43ID:???0308270
2006/12/10(日) 14:52:34ID:???で処理が止まっているようです。
尚、$urlは可変で60回位までは正常に処理でき、その後で止まるようです。
>>250でも書きましたがレン鯖ではOKなのでHTTP_RequestのVerの違いでしょうか?
0309270
2006/12/10(日) 14:54:41ID:rl/pga4Z$req =& new HTTP_Request($url);
if (!PEAR::isError($req->sendRequest())){ ←この行
処理・・・
}
0310nobodyさん
2006/12/10(日) 14:55:34ID:???つかエラー文吐かせらんないの?
0311nobodyさん
2006/12/10(日) 14:59:12ID:???このときのタイムアウトを設定したいと思うのですがどのように記述すればいいでしょうか?
0312270
2006/12/10(日) 15:06:03ID:???PHP5.2.0です。
Apacheのエラーログには何もでてきません。
エラー文吐かせる方法を知りません _| ̄|○
0313nobodyさん
2006/12/10(日) 15:11:08ID:???error_reporting = E_ALL & ~E_NOTICE
display_errors = On
全然関係ないけどPHP5だと"&"は必要ないね
互換性のために使えるはずだけど(うちの環境では現に使えてるから)
0314nobodyさん
2006/12/10(日) 15:18:59ID:???書き方間違ってんじゃないの?
つかApacheのエラーじゃなくてPearのエラーだけど
0315nobodyさん
2006/12/10(日) 15:21:01ID:???0316nobodyさん
2006/12/10(日) 15:40:36ID:q972gna1先達のお力を拝借できると助かります。
EUCで動く環境のPHPでDBの内容をクライアントにCSVをダウンロードする際に
マルチライン可能の項目に改行コードが混じると
SHIFT-JISに変換する際に(mb_convert_encodingを使用)
\r\nに変換されてしまい困っています。
うまいこと改行コード(CRLF?)を出力方法は無いものでしょか?
今のところ
�@nl2brを使い改行の前に<br />を差込
�Astrtokで<br />で分解し\r\nを\\nに変換
�B再度strtokで\\nで分解し 分解されるたびに mb_convert_encodingで
改行コードを出力
ここまでで一見上手く行った様に見えたのですが
小文字でn が来るとmb_convert_encodingで出力される際に
改行が出力されてしまいます。
参考になるような資料はないでしょうか?
0317nobodyさん
2006/12/10(日) 16:01:13ID:???DBに改行コード(LF)を含むテキストをEUC-JPで格納し、
出力する際はShift-JIS+LFで出力したいの?
まず、DB上でその情報を利用して検索などをしないなら、
適当にエンコードして格納しておけば?
検索する場合は、格納時に適当なキーワードを抽出して
別テーブルで管理し、本文はやはり適当にエンコードして
格納すれば?
というのがぱっと浮かんだ。
後は識者の光臨を待てw
0318270
2006/12/10(日) 16:23:33ID:???原因はPHP.iniのmax_execution_time=30に引っかかり30秒で止まってました。
途中のPGをちょっといじると
「 Maximum execution time of 30 seconds exceeded」のエラーメッセージが表示されたので、
set_time_limit(300);を追加してOKになりました。
0319316
2006/12/10(日) 16:33:01ID:q972gna1>DBに改行コード(LF)を含むテキストをEUC-JPで格納し、
>出力する際はShift-JIS+LFで出力したいの?
こういう事です。
残念ながらDBに適当にエンコードして格納して置くことは
許してもらえないのです(泣
0320nobodyさん
2006/12/10(日) 16:35:50ID:tstv0UFrPerlならsub{}、これだけですよね?
0322nobodyさん
2006/12/10(日) 16:50:34ID:???0324nobodyさん
2006/12/10(日) 16:52:10ID:???0325316
2006/12/10(日) 16:53:10ID:q972gna1ダウンロードしたcvsをExcelで扱いたいもので…
0326nobodyさん
2006/12/10(日) 16:57:48ID:???に全部置換すりゃええんじゃないの?
0327nobodyさん
2006/12/10(日) 17:01:07ID:???たとえば、singletonパターンを利用するときはgetInstance()と
いう静的なメソッドから内部でクラスのインスタンスを生成するし、
SQLクエリの結果を静的なプロパティに格納しておいて静的なメソッ
ドから取得することもある。
どーでもいいけど、名前空間という言葉の使い方を間違えてるよ。
0328nobodyさん
2006/12/10(日) 17:04:15ID:???継承ができる。
ただし基底クラスの静的メソッド内で、派生クラスを指定して呼び出したのかどうか、という情報が復元できない難点があるので、それを補う場合は引数にクラス名を渡すなどの工夫が必要。
0329nobodyさん
2006/12/10(日) 17:08:53ID:???クラスというスコープ内に定義されるわけだから、静的・非静的にかかわらず、privateなメソッドやプロパティを使用可能な点は、「ただ詰め込んだだけ」以上の利点だとは思わんのか?
0330nobodyさん
2006/12/10(日) 17:09:55ID:???0332316
2006/12/10(日) 17:22:54ID:q972gna1!!!
エンコードするタイミングと置換のタイミングが味噌だったようです。
�@EUC(DBの値)⇒SJISに変換
�A改行コードが「\r\n」と言う文字列に変換される
�BSJISで\r\nを\nに置換
�C出力
↓な感じで解決しそうです!
$hoge = mb_convert_encoding (hogedb($item[$hoge]),"SHIFT-JIS", "auto");
$hoge = str_replace ("\\r\\n","\n",$hoge);
print $hoge;
ありがとうございました。
0333nobodyさん
2006/12/10(日) 17:30:32ID:???>$hoge = str_replace ("\\r\\n","\n",$hoge);
これだとバックシュラッシュ多すぎじゃない?
0334333
2006/12/10(日) 17:31:43ID:???0336nobodyさん
2006/12/10(日) 17:44:12ID:???どうしてなのですか?
0337nobodyさん
2006/12/10(日) 17:47:02ID:???http://www.atmarkit.co.jp/flinux/special/php5/php5c.html
これ?
0339nobodyさん
2006/12/10(日) 18:05:34ID:???これ、古い記事だけど実際はサポートされなかったんだから、その
旨の文章をちょこっと追加してほしいよな。紛らわしい。
まぁ、なくても 特 に 困らない機能だけど、サポートされたらちょっと
嬉しい気もする。
0340nobodyさん
2006/12/10(日) 21:38:29ID:???require_once("PEAR/Info.php");
$info = new PEAR_Info();
$info->show();
?>
上記のソースでPEARのインストール済みのものが表示されますが、
なぜか一覧にMDB2とHTTP_Requestだけが表示されません。コマンドプロンプトの[pear list]では表示されます。
何が問題なのでしょうか?
0341nobodyさん
2006/12/11(月) 00:03:39ID:???PHPでPerlより楽に書けるパターンなんて
欲しい機能そのまんまな関数があったときくらいで
それ以外は全部面倒な書き方を強いられる。
Perlは言語仕様が強力すぎだからあきらめれ。
0342nobodyさん
2006/12/11(月) 00:22:33ID:???ためしにini_set('default_socket_timeout','4');
と設定してみたのですが、変わらないままでした。
使用している php は 4.4.4 です。よろしくお願い致します。
0343nobodyさん
2006/12/11(月) 00:23:43ID:???0344nobodyさん
2006/12/11(月) 00:41:47ID:???関数作ればfile_get_contentsと同じように使えるし
PEAR使えばもっと楽
0345nobodyさん
2006/12/11(月) 00:47:07ID:???0346nobodyさん
2006/12/11(月) 00:52:07ID:???ini_set('user_agent', $user_agent.'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)');
$string_contents = @file_get_contents("$url1") or $string_contents =file_get_contents("$local");
$string_contents = str_replace(",", "\n", $string_contents);
をfsockopenで記述するとどうなりますか?
0347nobodyさん
2006/12/11(月) 01:10:31ID:???0348nobodyさん
2006/12/11(月) 02:51:15ID:U3obhrAG0350nobodyさん
2006/12/11(月) 03:16:10ID:???0352nobodyさん
2006/12/11(月) 10:13:46ID:T7VRNufo$fp = fopen("./file.txt");
としたあとに、既に"./file.txt"が開かれているかどうかを確認するのに、
if(is_set($fp))
で確認してるんですが、この方法で確認するのは果たしてOKなのか疑問です。
どのように確認するのが、一般的なんでしょうか?
if($fp)
とかでもいいんでしょうか?
0353nobodyさん
2006/12/11(月) 10:15:07ID:T7VRNufo×is_set
〇isset
0354nobodyさん
2006/12/11(月) 10:27:56ID:???マニュアル嫁。
オープンが失敗すると、関数は FALSE を返し、 E_WARNING レベルのエラーを発行します。
@ を使ってこのwarningを抑制することもできます。
と書いてあるから、それを確認したらいいのでは。
0355nobodyさん
2006/12/11(月) 10:41:20ID:???>オープンが失敗すると、関数は FALSE を返し、 E_WARNING レベルのエラーを発行します。 @ を使ってこのwarningを抑制することもできます。
0356352
2006/12/11(月) 10:44:26ID:T7VRNufoなるほどありがとうございます。そこまでの意味を掴み切れてませんでしたorz
0357nobodyさん
2006/12/11(月) 11:08:35ID:???0358nobodyさん
2006/12/11(月) 11:29:13ID:???0359nobodyさん
2006/12/11(月) 15:00:11ID:???どのタイミングでどの様な処理をすれば良いのか見当もつきません。
良い方法を教示ください。
0360nobodyさん
2006/12/11(月) 16:11:58ID:T7VRNufo0361nobodyさん
2006/12/11(月) 16:35:18ID:???0362nobodyさん
2006/12/11(月) 17:44:08ID:knN2XhtSブラウザのウィンドウを新たに立ち上げた場合は
新ウィンドウは旧ウィンドウのセッションを引継ぎはしませんが、
タブブラウザで新しいタブを開いた場合には
新タブは旧タブのセッションを引き継いだ状態になってしまいます。
同じウィンドウのタブ同士で、セッションを同一に扱わせない処理って出来ますでしょうか?
0363nobodyさん
2006/12/11(月) 19:37:01ID:TN4IXMY0なら動作するんですが、
ftp_put( $conn, $remote, $local, "FTP_ASCII");
だと ftp_put() expects parameter 4 to be long というエラーが
出ます。理由をおしえてくり。
$mode = "FTP_ASCII";
ftp_put( $conn, $remote, $local, $mode);
も同じエラーが出ます。
0364nobodyさん
2006/12/11(月) 19:57:20ID:???http://jp.php.net/ftp_put
0365nobodyさん
2006/12/11(月) 19:59:40ID:???具体的にはCSVの一枚表だけでなく、一つのファイル中に複数のシートを作ったり
印刷範囲の設定などをしたいと考えています。
0366nobodyさん
2006/12/11(月) 20:03:10ID:???0367nobodyさん
2006/12/11(月) 20:06:15ID:???0368nobodyさん
2006/12/11(月) 20:09:45ID:???0369nobodyさん
2006/12/11(月) 20:28:42ID:???ちなみにサンプルではaddWroksheetメソッドのコール時に参照代入になっていますが
オブジェクトのコピーは自動で参照になると思ってましたが
これは必要なんでしょうか?
0370nobodyさん
2006/12/11(月) 20:39:19ID:???これ "FTP_ASCII" はFTP_ASCIIという文字列。
これ FTP_ASCII は定数。
引用符で囲むと意味がぜんぜん違うものになる。
ためしに $mode = FTP-ASCII; にしてみな。
0371370
2006/12/11(月) 20:40:29ID:???$mode = FTP_ASCII;
0372nobodyさん
2006/12/11(月) 21:28:03ID:???0373nobodyさん
2006/12/11(月) 21:56:24ID:???http://ml.php.gr.jp/search.html
0375nobodyさん
2006/12/11(月) 22:31:43ID:???最近PHP5向けのpeclでそういうのが出てた。
なんで出来ないかは「file upload progress php」あたりでググってみると分かる。
>>340
おいらのPEAR/Info.phpはPHPで記述されている
0376nobodyさん
2006/12/11(月) 22:41:09ID:???array_map()を使うしかないですか?
その場合to_encodingも配列で渡さないといけないようですが
countで数えるなりして同じ数の文字コードを格納した配列を作らなければならないんでしょうか?
数百個になりそうでちょっと気が引けるのですが・・・
0377nobodyさん
2006/12/11(月) 22:49:34ID:???0378nobodyさん
2006/12/11(月) 23:12:23ID:???独自関数とarray_walk_recursiveで作ったところでした・・・
0381nobodyさん
2006/12/12(火) 02:10:30ID:zaiE1Sl7ユーザーからの入力は当然エスケープして表示するわけですが、
このとき、ハートマークとかコピーライト記号とか、そういう特殊記号があった場合に、
それらだけをエスケープせずに表示するにはどういう実装方法を取るべきなのでしょうか?
0382nobodyさん
2006/12/12(火) 02:33:01ID:???自分で実体参照文字リストとか作って配列に入れといて、
htmlspecilacharsかけた後の文字列とその配列の中身を比較して、
同じのがあればそれをアンエスケープすれば?
たとえば「♥」を見つけたら「?」に戻す(アンエスケープする)とか。
0383382
2006/12/12(火) 02:43:58ID:???エスケープされた「後」に、実体参照文字だけ元に戻したいとなると
これじゃ無理だ・・・
0384nobodyさん
2006/12/12(火) 02:51:09ID:???0387nobodyさん
2006/12/12(火) 04:50:41ID:???そういう置換をするための正規表現ってどう書けばいいの??
よく分からないから当てずっぽうでこんなの↓書いてみたけど当然ダメだったorz
$text= htmlspecialchars('ハートだよ?');//文字列全体をエスケープ
$regex = "^&{1}[0-9]{3,6};$";
preg_replace("/".$regex."/", "&\1", $text);//実体参照文字だけをアンエスケープ
0388387
2006/12/12(火) 04:56:10ID:???仕方ないので半角&を全角&にして書き込んでみます。
$text= htmlspecialchars('ハートだよ&#9829;');//文字列全体をエスケープ。&は実際には半角
$regex = "^&amp;{1}[0-9]{3,6};$";//&は実際には半角
preg_replace("/".$regex."/", "&\1", $text);//実体参照文字だけをアンエスケープ
0389nobodyさん
2006/12/12(火) 07:23:12ID:???やりたいことは、出力したい内容をphpでデータベースから一回ごとにリアルタイムでとってきてxml形式のファイルを動的に生成出力したいのです。
単純に
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>.... という文字列を出力するだけではだめなのでしょうか?
ブラウザでアップロードしたURLを見てみても、見ることができません。
ページが見つかりません やその他のエラーは出ず、
アドレスバーにだけそのURLが入っている状態で、ブラウザの内容は前(任意)のサイトのままになってます。
0390nobodyさん
2006/12/12(火) 07:43:33ID:???ブラウザのキャッシュが効いてるんじゃないのか?
0391nobodyさん
2006/12/12(火) 09:22:33ID:???$db=new PDO($hoge1.":host=".$hoge2.";dbname=".$hoge3,$hoge4,$hoge5);
$stmt=$db->query("SELECT * FROM hogetable");
//$stmt=NULL;
while($row=$stmt->fetch(PDO::FETCH_ASSOC){
$stmt2=$db->prepare("INSERT IGNORE fugatable (fuga) VALUES (?);");
$stmt2->execute(array(row["hoge"]));
}
のようなコードを書きたいのですが、
$stmt=NULL;を入れないと$stmt2->executeが実行されないのは何故なんでしょうか。
0392nobodyさん
2006/12/12(火) 10:19:23ID:???>エラーやシリアライズされた FALSE 値をアンシリアライズする場合、
>FALSE が返されます。この特殊なケースは str を serialize(false)
>で比較する、もしくは E_NOTICE をキャッチすることで区別することができます。
と書いてあるのですが、1,2行目は
$str = 'hage';
if (@unserialize($str) === false && $str != serialize(false)) {
echo '1:unserialize error';
}
ということだと理解しました。
で、3行目なんですが、キャッチと言う言葉から
try {
$arr = @unserialize($str);
} catch (exception $e) {
if ($e->getCode() == E_NOTICE) {
echo '3:unserialize error';
}
}
と言う事かなと思ったのですが、どうも違うようです。
「E_NOTICEをキャッチすること」とは具体的にどういうことなのでしょうか?
0393nobodyさん
2006/12/12(火) 10:22:57ID:???結果セット内の全てのデータを取得しない場合、そのコールは失敗します。
PDOStatement::closeCursor() をコールし、次に PDO::query() をコールする前に
PDOStatement オブジェクトに関連付けられたリソースを解放してください。
0394nobodyさん
2006/12/12(火) 10:44:29ID:???サンプル重視のアホばっかだなwww
■ このスレッドは過去ログ倉庫に格納されています