【PHP】下らねぇ質問はID出して書き込みやがれ 80
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/02/01(日) 18:10:57ID:PdwQzQch過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 78
http://pc11.2ch.net/test/read.cgi/php/1230026935/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0454nobodyさん
2009/02/09(月) 18:58:53ID:9eTCLU3p$URL = "http://ja.wikipedia.org/wiki/%E9%99%B0%E8%8C%8E";
if ($stream = fopen($URL, 'r')) {
$a = stream_get_contents($stream, -1);
fclose($stream);
}
print $a;
0455nobodyさん
2009/02/09(月) 19:06:59ID:???Hostヘッダ出さないとアクセス拒否る方式だったよ。。2chも同じ感じ
0456nobodyさん
2009/02/09(月) 19:15:51ID:9eTCLU3pじゃあどうすればいい?
こんなエラーでるんだけど
Warning: fopen(http://ja.wikipedia.org/wiki/manko) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in
0457nobodyさん
2009/02/09(月) 19:24:47ID:???こっちではそれで取って来れるな
0458nobodyさん
2009/02/09(月) 19:25:26ID:9eTCLU3p発見した!!
mankoの部分をURLエンコードした日本語にすると問題なくいける
%E5%B0%8F%E6%B3%89%E7%B4%94%E4%B8%80%E9%83%8E
アルファベットなら本来URLエンコードする必要ないのにな。
なんで?
教えれ!
0459nobodyさん
2009/02/09(月) 19:27:25ID:dUyWPnKHまったく画質が変わりません。
何をインストールすればいいのでしょう?
0460nobodyさん
2009/02/09(月) 19:33:49ID:???どうせ、アルファベットといってもスペースとかが入ってたんだろ?
0463nobodyさん
2009/02/09(月) 20:49:31ID:9eTCLU3pフォームに入れてそれを次のページで出したいんだよ。
ソース全部だすからな。
おそらくpostで受信した文字が文字化けしてるんだと思うが全く分からん。
test.php
<form action="test2.php" method="post">
<input type="text" name="url" size=10><br>
<input type="submit" value="送信" name=post>
</form>
test2.php
<?php
if($_POST["post"]){
$URL = $_POST["url"];
$URL = "http://ja.wikipedia.org/wiki/".$URL;
if ($stream = fopen($URL, 'r')) {
$a = stream_get_contents($stream, -1);
fclose($stream);
}
print $a;
}
?>
両方ともファイルはunicodeで書いているぞ。
0464nobodyさん
2009/02/09(月) 20:51:14ID:9eTCLU3pだれか〜、知ってる人教えて。
0465nobodyさん
2009/02/09(月) 20:59:10ID:???↑これって何をしている?
0468nobodyさん
2009/02/09(月) 22:01:42ID:Qs8URjyA何してるっていうか、それなかったらブラウザのURL欄にそのページのURL入れて開いただけで、スクリプトが全部動作しちゃうだろ。
前のページからそのpostが送られてきた時にだけその動作するようにしてるんだよ。
>>467
いけたー!!お前は神。urlencode()でやってたわ。
こんな関数知らなかったし。
いや、マジで今日半日粘ったが、こんなにあっさり解決できるとは。
ありがとなー。
0469nobodyさん
2009/02/09(月) 22:06:54ID:FtaflIUs文字列出力部分だけmb_convert_encoding使うか、
obの出力バッファ使って全部まとめて変換するか、
あるいはそれ以外の方法か、どれがいいですか?
0470nobodyさん
2009/02/09(月) 22:19:00ID:WXM1ENAJ置き換え後の文字列が空欄の場合、置き換えないようにするには
どうすればいいのでしょうか?
0471nobodyさん
2009/02/09(月) 22:30:16ID:???じゃ最初からpreg_replaceかけなきゃいいんじゃね?
0472nobodyさん
2009/02/09(月) 22:31:48ID:???ob_を使ってまとめてエンコードを変換するとスッキリまとめやすい。
いちいちmb_*を使ってると、エンコードをいじる場所がコード内のあちこちに散りやすいからな。
個人的には出力内容を最初から文字列として保持しておく(コード内にechoは最後の一箇所のみ)のが好みだが、処理の流れはob_*と大差ない。
ビューとロジックが完全に分離してるとこういうのは凄く楽なので、余裕があるなら勉強するといい。
0473nobodyさん
2009/02/09(月) 22:38:34ID:???思わぬトラブルになったりしない?
ビューとロジック分離っていうかロジックの出力を頭使わずに丸ごと変換してビューって言ってる感じじゃない?
凄く楽っていうか楽だけ追求してね?
0474nobodyさん
2009/02/09(月) 22:52:17ID:???0476nobodyさん
2009/02/10(火) 01:40:45ID:JZ5c+5nE$func = "TEST";
echo $func."()";
でecho TEST();が実行されるようなイメージなのですが無理です。
$funcの値を指定せずに、存在する関数を実行したいのですが
どのような書き方をすればいいのでしょうか?
0477nobodyさん
2009/02/10(火) 01:44:54ID:???echo $func();
0478nobodyさん
2009/02/10(火) 05:23:25ID:???ttp://www.doyouphp.jp/php5/php5_autoload.shtml
上記urlを参考に同じ階層にあるクラスのオートロードは出来たのですが、
深い階層のクラスをオートロードすることが出来ません。
__autoload()では同一階層しかサポートされてないのでしょうか。
■ファイル構成
test.php
Class/Testclass.php
■test.phpの中
function __autoload($className) {
include_once $className . ".php";
}
$test = New Class_TestCass();
■TestClass.php
の中
class Class_Testclass{
public function Cass_Testclass(){
}
}
0479nobodyさん
2009/02/10(火) 05:24:11ID:Y5D0wRGjすいません、ID出すの忘れてました。
0480nobodyさん
2009/02/10(火) 05:43:43ID:???0481nobodyさん
2009/02/10(火) 12:30:18ID:Y5D0wRGjありがとうございます。
確かにその方法なら深い階層も対応できますね。
しかし階層決め打ちということは、
下記のように用途によってディレクトリ分類された場合に対応できなさそうな感じですね。
Class/Mail/MailUtils.php
Class/Http/HttpUtils.php
__autoload()を使わず素直に include_once したほうが良いでしょうか。
0482nobodyさん
2009/02/10(火) 12:33:37ID:???0483nobodyさん
2009/02/10(火) 13:05:28ID:???複数のディレクトリから探すよう自分で実装するなり
好きな動きをするオートローダを複数登録する
http://www.php.net/manual/ja/function.spl-autoload-register.php
function __autoload() {} を定義する方法は PHP 5.0 時代のもの
0484nobodyさん
2009/02/10(火) 16:01:26ID:SQlQ1ExK0485nobodyさん
2009/02/10(火) 16:06:01ID:???0486nobodyさん
2009/02/10(火) 22:09:13ID:/0S9pNKDこの接続で、クエリ発行時のフェッチモードにPDO::FETCH_CLASSを指定すると
$sth = $dbh->query($sql, PDO::FETCH_CLASS, "classname");
次の警告が出ました。(抜粋)
PHP might crash if you don't call $stmt->setFetchMode() to reset to defaults on this persistent statement.
警告には"将来のバージョンで改善される"とあり、最新版ではなおっているようなのですが、PHP5.2.0ではこうなります。
このまま続けると、間もなくデータベース(MySQL)接続数の上限を越え、アクセスできなくなりました。
この警告の意味がよくわからないのですが、これは
(1)「永続的接続が有効の場合、フェッチモードはデフォルトにしとけ」という意味でいいんでしょうか?
(2)「使い終わった後デフォルトに戻しとけ」のような気もするし・・・
で、いくつかテストしてみると、
永続的接続無効ならPDO::FETCH_CLASSでいける、
有効のまま後で戻しても警告は同じ(警告が示すスクリプト中の行番号はクエリ発行(上記)の行)
ということで、(1)の意味だろうと思ってるのですが、いまいち確信もてないというか、情報も見つけられませんでした。
回避策などありましたらお願いします。
0487nobodyさん
2009/02/10(火) 22:41:41ID:???エラーメッセージの意味は、
永続的接続を使う時、後からfetchModeを変えるなよ。さもなければPHPはクラッシュするよ。(現バージョンでは)
っていう意味だと思うので、
永続的接続を使うなら、最初っからfetchMode込みでPDOを有効にするとかで回避できないかな。(想像だけど)
0488486
2009/02/10(火) 23:12:03ID:???ありがとうございます。
確かに"後から変えるな"でしたらツジツマがあいます。
レン鯖環境なのでPHPのバージョンアップは無理でして、
先に複数のスクリプトが動作している都合もあるため、
今回はPDO::FETCH_CLASSの使用を断念する方向で考えたいと思います。
尚、確認できた範囲では、この現象はPHP5.2.6では修正されていました。
0489nobodyさん
2009/02/10(火) 23:43:38ID:???$filename = './sample.txt';
$fp = fopen($filename,'r') or die("ファイル({$filename})のオープンに失敗しました");
while ($i<10) {
$line = fgets($fp,1024);
print $line."<br>";
$i++;
}
fclose($fp);
?>
この処理ってファイル全部読みこんでから1行ずつ参照してるの?
それとも1行ずつ読み込んでるの?
0490nobodyさん
2009/02/10(火) 23:44:19ID:zLX+VTwA0492nobodyさん
2009/02/10(火) 23:49:49ID:???0493nobodyさん
2009/02/11(水) 00:09:02ID:???0494nobodyさん
2009/02/11(水) 00:11:52ID:ZREnIZbz0495489
2009/02/11(水) 00:25:22ID:ad9tMb4N0496nobodyさん
2009/02/11(水) 00:27:36ID:???開いたり読んだりはしません。名前に騙されないように。
0497nobodyさん
2009/02/11(水) 00:34:44ID:???変数に追記しながら、memory_get_usageを出力したらわかるよ。
0498nobodyさん
2009/02/11(水) 01:07:44ID:???なんもオープンしてないやん、っていう。
0499nobodyさん
2009/02/11(水) 01:20:02ID:???0502nobodyさん
2009/02/11(水) 02:09:56ID:???これはひどい
0503nobodyさん
2009/02/11(水) 02:56:55ID:???0504nobodyさん
2009/02/11(水) 03:06:44ID:???0505nobodyさん
2009/02/11(水) 06:16:18ID:fA4Wiaglメールタイトルだけが化けてしまいます。
化けるときと化けないときがあって、
「質問 山田」みたいなタイトルのとき、質問の後の空白部分に
半角スペースを何個入れるか、全角スペースを何個入れるかみたいな微妙な違いで
それ以降の名前部分が化けるわけです
(質問A みたいに、他の文字を追加しても化けます)
どういうことなんでしょうか?
タイトル全体のバイト数がカギかと思ったのですがそうでもなくまるで見当がつきません
どうしたら化けないようにできるでしょうか、ご意見御願いします。
本文にもタイトルにも
mb_convert_encoding(mb_convert_kana($title), "ISO-2022-JP", "SJIS");
といった処理はしてあります
0506nobodyさん
2009/02/11(水) 06:25:05ID:???mb周りの設定がわからないとエスパーするにも限界があるかと。
あとは、化ける場合と、化けない場合で、
mb_encode_mimeheader
した結果がどうなるか試してみるとか。
0507nobodyさん
2009/02/11(水) 06:56:22ID:2yeXD9TR含んだ文字は出力できないんでしょうか?
OSはXP、apache2.23でphpは5.28です。
$hen01 = $_POST["namae"];
$fp = fopen('x.txt', 'a');
flock($fp, LOCK_EX);
$return = fputs($fp, "$hen01\n");
flock($fp, LOCK_UN);
fclose($fp);
このように書くと普通に改行つきでx.txtが生成されるんですが4行目を
$return = fputs($fp, "<input value= "$hen01\n" onFocus="this.select();">");
なんて書くとエラーになって書き出してくれません。
微妙に"の位置を色々変えたりしたけどだめでした。
0508nobodyさん
2009/02/11(水) 06:58:10ID:???0509nobodyさん
2009/02/11(水) 07:11:54ID:???0510nobodyさん
2009/02/11(水) 07:13:20ID:2yeXD9TRありがとうございます。
やっぱそうでしたか、、""が不適切なのは解りました。
仕様的にはhtmlタグも使えるって認識でいいんですよね?
\ は別の部分(カラータグ)で使ったのを思い出しました、エスケープ文字って言うんでしたっけ。
早速再挑戦してきます。
0511nobodyさん
2009/02/11(水) 07:16:06ID:???0512nobodyさん
2009/02/11(水) 10:25:50ID:mmguShEj# PHP 5.2.8 installer [17,662Kb] - 08 December 2008
# PHP 5.2.8 Non-thread-safe installer [17,489Kb] - 08 December 2008
↑ノンスレッドセーフって、どう違うんですか?
0514nobodyさん
2009/02/11(水) 12:12:50ID:???ノンスレッドセーフ版はスレッドセーフ版に比べてかかるコストが少ないため
スレッドセーフである必要がない場面でパフォーマンスを出すために使われる
Non-thread-safe の方をスレッドセーフなApacheやIISで動かすと死ぬ
スレッドについてはOS寄りの話だからググってくれ
0515nobodyさん
2009/02/11(水) 12:14:48ID:???$fpに代入してvar_dump($fp)してみろksg
0516nobodyさん
2009/02/11(水) 12:19:35ID:???あー「スレッドセーフじゃない」 って事じゃなくて、
「スレッド無しでもセーフ」って事ですかw
じゃぁNTS版でいいわけですね。りょうーかい&さんきゅ
0517nobodyさん
2009/02/11(水) 13:23:12ID:???困った子だねぇ、
<?php
$fp = fopen("test.txt", "r");
var_dump($fp);
結果:
resource(2) of type (stream)
0518nobodyさん
2009/02/11(水) 18:28:21ID:???0519nobodyさん
2009/02/11(水) 21:31:55ID:lrcGAYKJPHP Version 5.2.8
0520nobodyさん
2009/02/11(水) 21:44:11ID:bJ9hTr4x以下のソースみたいにCURL関数を使ってgifとかjpegとかにつなぐと文字化けしちゃうのはどうしてなんでしょうか?
ちゃんと画像を表示するにはどうしたらいいのでしょうか?
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"http://img.2ch.net/img/php_a.gif");
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
"Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg",
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
));
$output = curl_exec($ch);
curl_close($ch);
echo $output;
0522nobodyさん
2009/02/11(水) 21:52:17ID:???0524nobodyさん
2009/02/11(水) 22:02:26ID:???あれって、一度のダウンロードで、ファイルのフルパス取得してから
次からはそのフルパスでアクセスすれば、DL回数に反映されないんじゃない、
と思ってやってみたら、今のところ有名なアップローダーで全部成功した。
0525nobodyさん
2009/02/11(水) 22:12:04ID:???0526nobodyさん
2009/02/11(水) 22:14:48ID:???でもDL回数に反映されなきゃ、そのフルパスからダウンロードすれば
ファイル削除されることなくみんなダウンロードできちゃうけど、
でも、そうなったらアップロード主が消すと思うけど。
0527nobodyさん
2009/02/11(水) 22:20:50ID:???0528nobodyさん
2009/02/11(水) 22:21:09ID:???0529nobodyさん
2009/02/11(水) 22:24:54ID:???HTML中で改行してもブラウザ上の表示は改行されない。
header('Content-Type: text/plain');
としておくか、<br>を出力しろ。
0530nobodyさん
2009/02/11(水) 22:28:42ID:???DL制限を例えば10回な感じで設定して、アップロード。
↓
ファイルのダウンロードページにアクセスしたときに、DL回数がカウントされていく
↓
そのカウントが、設定した10回に達したら削除される
みたいな感じのアップローダー
0531nobodyさん
2009/02/11(水) 22:30:41ID:???0532nobodyさん
2009/02/11(水) 22:37:18ID:???<?php
header('Content-Type: text/plain');
print "aaa\n";
print "bbb";
?>
ほー
これだと改行されるんだ?
0533nobodyさん
2009/02/11(水) 22:46:13ID:???0536nobodyさん
2009/02/12(木) 00:15:58ID:???0をpostしたときと区別つかん
0537nobodyさん
2009/02/12(木) 00:16:45ID:???$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, "http://img.2ch.net/img/php_a.gif"l);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
$image = curl_exec($ch);
curl_close($ch);
header("Content-type: image/gif");
echo $image;
>>536
===
0539nobodyさん
2009/02/12(木) 00:19:33ID:???0541nobodyさん
2009/02/12(木) 00:31:48ID:uAz9Jv0X0542nobodyさん
2009/02/12(木) 00:36:02ID:???0543nobodyさん
2009/02/12(木) 00:49:20ID:???0544nobodyさん
2009/02/12(木) 03:30:09ID:???感動した。
0545nobodyさん
2009/02/12(木) 05:27:34ID:???すまん、ord出した人だけど、ordは最初の1文字だけだって後から気付いた
13 10 なら13が返るので正解っぽい。
0546nobodyさん
2009/02/12(木) 09:44:20ID:YRRhxMXpクッキーに上書きはできるのですが
setcookie ("TestCookie", "テスト");
クッキーを削除したいのに消えないんです
↓
setcookie ("TestCookie");
再度 $_COOKIE["TestCookie"];とすると
テスト
と表示されてしまいます。
過去の時間指定してもダメでした。なんとかなりませんか?
0547nobodyさん
2009/02/12(木) 09:54:56ID:???再度リクエストするとクッキーが消えているのが確認できるはず。
つうか開発者なら、HTTPヘッダーを確認できる状態にして、Set-Cookieヘッダを読め。
0548nobodyさん
2009/02/12(木) 09:57:37ID:???○ヘッダ
0549nobodyさん
2009/02/12(木) 10:23:24ID:???ttp://www.microsoft.com/japan/presspass/detail.aspx?newsid=3491
政府の外来語ルールもいまは「省く事ができる」になっている。
JISルールも今はどっちでも良い事になっている。
本物のエンジニアは長音記号を削る(キリッ
だっておwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0550nobodyさん
2009/02/12(木) 10:33:27ID:???誰も指摘しなかったことに笑ったけど。
0551nobodyさん
2009/02/12(木) 10:36:48ID:???0552nobodyさん
2009/02/12(木) 10:40:44ID:sBTdXhh1正の数のみ受け付ける処理をしたいのですがif(0 > $i)のようなやり方以外で
方法ご存知の方いらっしゃいましたらご教示お願いします
■ このスレッドは過去ログ倉庫に格納されています