【PHP】下らねぇ質問はここに書き込みやがれ 31
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2006/10/25(水) 08:45:46ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
【前スレ】
【PHP】下らねぇ質問はここに書き込みやがれ 30
http://pc8.2ch.net/test/read.cgi/php/1159979905/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しない)
・ サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0809nobodyさん
2006/11/04(土) 00:39:40ID:RV2l/KERうぅっ・・・すいません。書いてありました。面目ないです。
>>808
くぅーっ!ありがとうございます。お蔭様でインストールできました。Windowsの方は・・・
インストールすると、XML_Utilも必要と言われたのでインストールしました。
Windowsの方は動作も確認できたので、ヤター!!って思って、Linuxにもインストールしようと
したのですが、XML_UtilとXML_Parserが必要といわれたので、両方インストールしました。
ところが、、、XML_Parserはalready installなのでSkippingと表示されてるのに、XML_Serializer
をインストールしようとすると、XML_Parserがrequiresだと言われます。。。
最後の、最後に教えて下さい。マニュアル調べました(・・・多分見落としてないと思います)
0810803,805
2006/11/04(土) 00:44:01ID:RV2l/KER0811nobodyさん
2006/11/04(土) 01:30:49ID:AU0Zf4A1http://pc8.2ch.net/test/read.cgi/php/1161733546/
だと
http://pc8.2ch.net
となってほしいです
今は自分が知っている関数の範囲内で
$s = split("/", $url);
$host = $s[0].'//'.$s[2];
という風にしています。。
よろしくお願いいたします
0813nobodyさん
2006/11/04(土) 01:42:04ID:???0814nobodyさん
2006/11/04(土) 01:58:29ID:???タグを自動で挿入してくれるようなライブラリなどありますでしょうか?
もしあったら教えてください。
お願いします。
0815nobodyさん
2006/11/04(土) 02:50:44ID:???0816nobodyさん
2006/11/04(土) 03:17:45ID:???0817nobodyさん
2006/11/04(土) 03:28:36ID:???0818803,805
2006/11/04(土) 04:02:04ID:RV2l/KER自己レスです。
XML_Parserをforceインストールしたらでけました。色々教えてくれてどうもありがとうでした!
0820nobodyさん
2006/11/04(土) 04:58:30ID:???0821nobodyさん
2006/11/04(土) 06:56:58ID:+mcy38xB[home]の下に[public_html](ドキュメントルート)の下に[www]ディレクトリ
[home]の下に[local](ドキュメントルート外)の下に[log]
wwwディレクトリにindex.phpがあり、
このファイルからlogディレクトリを指定したいのですが
間違っている指定の仕方があればご指摘ください。
1. ../../local/log
2. ../../local/log/
3. home/local/log
4. home/local/log/
5. /home/local/log
6. /home/local/log/
0822nobodyさん
2006/11/04(土) 07:07:06ID:???0823nobodyさん
2006/11/04(土) 07:15:44ID:???なんで/homeの下にlocalやpublic_htmlを置いてるのか知らんが
0824nobodyさん
2006/11/04(土) 07:16:13ID:???正解は1,2,5,6でした。
0826nobodyさん
2006/11/04(土) 07:24:38ID:+mcy38xB「変数で指定したディレクトリ名」で処理するとWarningエラーがでるのですが
@で回避するのとディレクトリ名をチェックするのはどちらが妥当でしょうか?
0828nobodyさん
2006/11/04(土) 08:00:06ID:???>ご存知のとおり、define() は非常に遅いです。
遅いんですか?
0829nobodyさん
2006/11/04(土) 09:27:45ID:???クライアントの依頼で受け皿を変更することなくファイルを送る必要がありまして、
通常の投稿フォームから投稿するのと同様にサーバ内のファイルを送らなければならなくなりました。
他のPOSTデータは普通に送れるのですがファイルはググってみたのですが的確なものがヒットしませんでした。
ご存知の方いらっしゃいましたらよろしくお願いします。
環境:共にFedoraCore4 PHP-5.1.4
0830nobodyさん
2006/11/04(土) 09:35:55ID:???それではよろしくお願いいたします。
0832nobodyさん
2006/11/04(土) 10:03:37ID:???こいつのクールな使い方を教えてくれ
0833nobodyさん
2006/11/04(土) 10:04:36ID:+mcy38xB</body></html>までソースが読まないんですけど、
die()の中に</body></html>書いておくものでしょうか?
それとも処理が停止したらhtmlの文法なんて気にすることでもないのでしょうか?
0834nobodyさん
2006/11/04(土) 10:18:38ID:???$cool = "E_RECOVERABLE_ERROR ";
if (isset($cool) == "cool") {
echo "E_RECOVERABLE_ERROR はクールを使ってます";
}else{
echo "クールと勘違いしてます";
}
exit;
0835nobodyさん
2006/11/04(土) 10:30:11ID:???そうできたら楽なのですが、自分でちゃんと作って提出するのが条件とのことです。
こんな感じでヘッダー叩いて見たのですがうまく上がりませんorz
POST /test/upload.php HTTP/1.0
Host: hoge.hoge
Content-Type: multipart/form-data; boundary=test
Connection: close
Content-Length: 8
--test
Content-Disposition: form-data; name="test"; filename="test.txt"
Content-Type: text/plain
testtest
--test
0838nobodyさん
2006/11/04(土) 11:08:41ID:???0839nobodyさん
2006/11/04(土) 11:10:18ID:+mcy38xBlinux上のサーバでないと確認できないこともあるわけで、
開発はwinでやるのは効率がわるいでしょうか?
ぁたしはdreamweaverでデザインとphpの開発しております。
先人のご意見お聞かせください。
0840nobodyさん
2006/11/04(土) 11:10:24ID:???0841nobodyさん
2006/11/04(土) 11:11:43ID:???0842835
2006/11/04(土) 11:12:31ID:???まぁ再来年辺りこういう宿題やってるかもしれんけど(´・ω・)
とりあえず
「Content-Length: 8」が間違ってたようでファイルは送信できました。 と報告迄。
今度は逆にPOSTデータが受信されなくなってしまった罠。
RFC1867にこの辺について言及されてるけどPOSTデータの扱いがよく分からんかった。
0843nobodyさん
2006/11/04(土) 11:23:25ID:???きちんと宿題なんですぅ〜と書け
0844835
2006/11/04(土) 11:23:28ID:???POSTも「--test」で区切る必要があったようです。
結局余りphpと関係ない部位の質問となってしまいました; スレ汚しスミマセン。
0845835
2006/11/04(土) 11:24:48ID:???だから宿題じゃねーーーーーよwwww 普通科の工房なぬんなwwww
ていうかこんな宿題が出たらどれほど楽しいことか。 普通科とかツマラン過ぎるんだけど('A`)
まじ高専とかウラヤマシス。
0846nobodyさん
2006/11/04(土) 11:31:43ID:???まず第一の前提として、PHPのハッシュ(連想配列)というのは処理が遅いです。参照も遅いけど特に格納が。
そしてdefineというのは実態は$GLOBALSとは別のグローバル変数を保持してるに過ぎないということ。
そのため、よくある使い方としてC言語のように数十ものdefineを大量定義してるコードはかなり遅い。
しかもdefineの定義はプログラム先頭で全部まとめて行う人が多いため、このオーバーヘッドはバカにならない。
(グローバル変数を減らすよう努力する人は多いがdefineはむしろ増やしたがる傾向にある)
遅いと言ってもグローバル変数と同レベルで、それ以上には遅くも速くも無いです。
しかしC言語の感覚(Cでのdefineはプリプロセッサなので実行速度に影響せず極めて高速)では激遅と言えるでしょう。
APCのdefine_constantsとload_constansは、これを事前にメモリ展開が容易な構造で保存しておき、
必要時にキャッシュデータを丸ごと読み込んで高速にハッシュへ格納する、という仕組みのもの。
0847839
2006/11/04(土) 11:35:55ID:???192.168.x.xでwinからlinuxのサーバへつながらないです・・
0848nobodyさん
2006/11/04(土) 11:39:46ID:???分けてない。Linux用なら開発もLinux上で行う。
ただ、エディタはWin用のを使いたいので、sambaで
LinuxサーバーにWinクライアントで直接アクセスして
ソースの編集をやってます。
これは別にFTPでやってもいいと思うけど。
0849nobodyさん
2006/11/04(土) 11:57:42ID:???0851nobodyさん
2006/11/04(土) 12:00:50ID:???linux のコマンドを使うような処理とか、一部OSの機能を使うようなものは
あきらめるが、簡単なサイト程度なら、両方で動くようなものをつくる
ただし、環境情報などは各環境で別々に設定ファイルを書いて
それを利用するようにしている
絶対パスが必要なものとか
URLが必要なものとか
0852nobodyさん
2006/11/04(土) 12:01:28ID:???使わないものまで無闇になんでもかんでも定義しない。
ってだけ。コンパイル型の言語じゃない以上、それが結論かと。
0853839
2006/11/04(土) 12:27:42ID:???せっかくだからlinuxに移ろうかと思います。
ご協力ぁりがとうございます
0855nobodyさん
2006/11/04(土) 13:07:49ID:???やっぱgettextのほうが速いのかな。
0856nobodyさん
2006/11/04(土) 13:12:20ID:???クライアントが入力した値をデータベースに書き込む場合、
データを壊さないためにもロックをかけて処理を行うことが無難でしょうか?
0857nobodyさん
2006/11/04(土) 13:15:09ID:???0859nobodyさん
2006/11/04(土) 13:18:09ID:???RDBMSにおけるロックの機能を勘違いしてるように思える。
データ間に不整合が出るケースはロックしないとそりゃダメだし(規模関係ない)、
そうでないならロックなどする必要はない。(これも規模関係ない)
というか、そういう話はデータベース板で聞いた方がいいと思うよ。
0862nobodyさん
2006/11/04(土) 13:46:27ID:UuLfn9RK送信したいと思っています。
下記のスクリプトを作成しましたが、エラーは出ないのですが、XMLの返答メッセージ
が返ってこず、トラックバックしてくれません。
どうすればよいでしょうか?
<?php
$sock = fsockopen("app.f.cocolog-nifty.com", 80, $errno, $errstr, 60);
if (!$sock) die("$errstr ($errno)\n");
$data = "title=".urlencode("test送信");
$data .= "&url=".urlencode("http://www.yahoo.co.jp");
$data .= "&blog_name=".urlencode("PHPからトラバをする");
$data .= "&excerpt=".urlencode("PHPモジュールから送ってます");
$tburl="t/trackback/3950899";
fputs($sock, "POST ".$tburl." HTTP/1.1\r\n");
fputs($sock, "Host: blog.seesaa.jp\r\n");
fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($sock, "Content-length: " . strlen($data) . "\r\n");
fputs($sock, "\r\n");
fputs($sock, "$data\r\n");
$body =" ";
while (!feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
print "test";
?>
0865nobodyさん
2006/11/04(土) 14:42:37ID:???0866nobodyさん
2006/11/04(土) 14:42:53ID:e0EPAzx7環境:
Redhat ES3
PHP4.3.9
参照渡しのところを省略可能な関数を作りたいのですが、可能なんでしょうか?
一応公式マニュアルの関数の項目には目を通し、ググっても見たのですが・・・。
もしやり方をご存知の方はご教授お願いします。
具体的に、
preg_match(string pattern, string subject [, array &matches [, int flags [, int offset]]] ) のarray &matches,
ftp_alloc(resource ftp_stream, int filesize [, string &result]) のstring &result
ようなことがしたいんです。
よろしくお願いします。
0867nobodyさん
2006/11/04(土) 14:53:14ID:???0869nobodyさん
2006/11/04(土) 14:55:52ID:UuLfn9RK今、トラックバックスパムではないんですが、トラックバックを一度で複数送る
研究をしていて、それで作成したいんです。
フォームだと複数送れません。
>>863
echo してみたら、Bad requestと表示されました。
プログラムが間違っているということですかね?
でしたら、どこが間違っているか教えていただけますでしょうか?
0870nobodyさん
2006/11/04(土) 14:58:15ID:???> fputs($sock, "$data\r\n");
Content-lengthが実際のデータ長より2バイト短い
0871nobodyさん
2006/11/04(土) 14:58:58ID:UuLfn9RK上記のエラーメッセージです。
HTTP/1.1 400 Bad Request Date: Sat, 04 Nov 2006 05:53:46 GMT Server: Apache Content-Length: 226 Connection: close Content-Type: text/html; charset=iso-8859-1
Bad Request
Your browser sent a request that this server could not understand
0874nobodyさん
2006/11/04(土) 15:14:53ID:UuLfn9RK思ったんですけど、このスクリプトでレンタルブログ(ココログ)などにトラックバック
って送れないですよね?
0875nobodyさん
2006/11/04(土) 16:14:05ID:Z4GrE+jA環境の都合で i18n_loc_get_default は使えそうに無いです.
PHP を bamcompile で exe を作っているのですが,
ファイルを出力するときに OS(Windows)が使っている文字コードが分からないと
都合が良くないからです.
どうせ日本でしか使われないから Shift-JIS 決め打ちでいいやっていうわけにもいかないし
0876nobodyさん
2006/11/04(土) 16:47:39ID:???0877nobodyさん
2006/11/04(土) 17:19:53ID:Z4GrE+jAWindows と Linux の両方で見てみましたけど
使えそうなのはありませんでした...
つか CPU 名とか分かるくせに何で文字コードとかわらないんだ...
0878875
2006/11/04(土) 17:23:39ID:Z4GrE+jA0880828
2006/11/04(土) 17:44:26ID:???詳しくわかりやすい解説ありがとうございます!
define()はそんなに使わないので、高速でなくともまあいいのですが、
それよりも連想配列が遅いというのは、あんまりいい気分ではないですね。
連想配列、便利なだけに。
0882nobodyさん
2006/11/04(土) 17:55:22ID:+mcy38xBというURLがあります。このURLの?test部分を
$_GETで受け取りたいのですが、記述がわかりません
普通に$_GETとしても取得できませんし、$_GET[]とやるとエラーがでます。
どなたかアドバイスお願いいたします。
0883nobodyさん
2006/11/04(土) 17:55:33ID:???0884nobodyさん
2006/11/04(土) 17:58:02ID:???$_SERVER['QUERY_STRING']
>>883
まぁ、元々の質問がAPC関連=PHPのパフォーマンスに不満のある人、の場合だし
0885875
2006/11/04(土) 18:05:17ID:Z4GrE+jAスクリプトを変換した EXE にファイルを D&D する程度なんで
ユーザに入力を求めるのは少し不自然かもしれないです.
けどほかに考え付かないので使ってみようかな.
0887nobodyさん
2006/11/04(土) 18:23:47ID:???ファイル受け取ってどうこうするんだったらその中身調べて
キャラクタセットをdetectするのが妥当じゃないのか?
0888nobodyさん
2006/11/04(土) 18:25:40ID:???0889nobodyさん
2006/11/04(土) 18:28:00ID:Z9X2uAOu呼び出せず困っています。なにかヒントがあればお願いします。
WIN XP + Apache 2.0.50 + PHP 4.3.7
[表示用ファイル test.php]
require("session.php");
<!-- セッション部 -->
<?= $session ?>
[session.php]
//セッションが開始されていなければ、フォームを表示
$session = "<form action=" . $thisfile . " method='post'>....."
$thisfile = $_SERVER["SERVER_NAME"] . $_SERVER["PHP_SELF"];
を指定すると <print>文では、localhost//test/test.php と正しく表示されるのですが
アドレスバーの表示は http://localhost//test/localhost//test/test.php となって
しまします。ちなみに
$thisfile = $_SERVER["PHP_SELF"];
だけだと、<print>文表示は //test/test.php アドレスバーは
http://test/test1.php となってともに not found です。
0891nobodyさん
2006/11/04(土) 18:39:21ID:???> を指定すると <print>文では、localhost//test/test.php と正しく表示されるのですが
ホスト名とパスの間が「//」なのは全然正しくないと思う。
> $thisfile = $_SERVER["PHP_SELF"];
> だけだと、<print>文表示は //test/test.php
なんかApacheの動作が変だと思う。再インストールしてダメならバージョン変えてみては?
0892nobodyさん
2006/11/04(土) 18:42:34ID:???> アドレスバーの表示は http://localhost//test/localhost//test/test.php となって
元々の呼び出し方自体がおかしいんじゃないの?
http://localhost/test/test.phpで実行したらちゃんと動かないか?
ちなみに通常は$_SERVER["PHP_SELF"]だけでOK。
$_SERVER["SERVER_NAME"]もつけてフルURLにするなら頭にhttp://も足さなきゃダメ。
0893nobodyさん
2006/11/04(土) 18:42:49ID:Z9X2uAOuありがとうございます。Apache 側の設定の問題でしたかっ!
Apache の設定の方を調べてみます
0894nobodyさん
2006/11/04(土) 18:47:42ID:Z9X2uAOuhttp://localhost/test/test.php で動作します。
http://localhost//test/test.php アドレスバーに打ち込んでも
表示されるので、これでもよいのか?と...(汗)すみません...
0895nobodyさん
2006/11/04(土) 20:42:43ID:???そんなおまえにこれをやろう。使い道は聞くな。
function php_internal_hash_func($key)
{
$hash = 5381;
for ($i = 0; $i < strlen($key); $i++) {
$hash = 0xFFFF & (($hash << 5) + $hash + ord($key{$i}));
}
return $hash;
}
function check_symbols_hash($arr)
{
for ($mask = 8; $mask < count($arr); $mask <<= 1);
$mask--;
$ret = array();
foreach ($arr as $val) {
$ret[php_internal_hash_func($val) & $mask][] = $val;
}
ksort($ret);
return $ret;
}
0896nobodyさん
2006/11/04(土) 20:42:46ID:DqH0rqVhPHP-Manualの例を引用すると・・
<?php
// この例ではHTTPを通してURL上のHTMLソースを取得します。
$lines = file('http://www.yahoo.co.jp');
// 配列をループしてHTMLをHTMLソースとして表示し、行番号もつけます。
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
?>
これで、htmlのソースが表示できるのですが、file_get_contents()を
使った場合どのように記述すれば良いのかわかりません。
よろしければ、お教え願えませんか?
0897nobodyさん
2006/11/04(土) 21:03:06ID:???foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
0898nobodyさん
2006/11/04(土) 21:35:36ID:DqH0rqVhなるほど。ありがとうございました。
あと、file_get_contents()を使う場合は配列に読み込むわけでは
ないですよね?それで、foreachを使わずにするために、fileでは
なく、file_get_contents()はどうかと思ったんですが、他の記述
方法はないでしょうか?
0899nobodyさん
2006/11/04(土) 21:41:16ID:???0900nobodyさん
2006/11/04(土) 21:55:48ID:???ようするにループでやらずに行番号付けたいってこと?
そうなると改行コードを置換とかしないといけないと思うけど、
連番付けながら置換ってちょっと面倒くさいよ?
なんでわざわざループが必要な処理をループ使わないでやりたいなんて思うのさ。
0901nobodyさん
2006/11/04(土) 21:59:54ID:???PHPでWebを作る際に出力を全てprintやecho等でやっています。
こうして動的に出力される「ページのソース」を見ると無駄な改行がたくさん入っています。
何故改行が入ってしまうのでしょうか?原因不明の問題が出ないか心配です。
と書きながら原因思いつき&判明したフォー
----------------チラシの裏----------------
\n←この部分とか
\n
<?php
\n
function example()
{
\n
}
\n
\n
?>←これ以下の
\n←この部分
\n
----------------チラシの裏----------------
が出力されてたとです。
PHPが埋め込みスクリプトだと再認識したとです。
良い子のみんなはこんな質問しちゃだめですよ(´・ω・`)
0902875
2006/11/04(土) 22:07:42ID:Z4GrE+jAそうですね自分もそんな気がしてたんですがWin32apiのことは全然知らなくて...
windowsに直接ロケールとか調べるコマンドあったらsystem()とか使おうと思ったんですけど
それもちょっと分からなかったんです
>>887
>>890さんが言うとうり扱うファイルはバイナリファイルなんで文字コードを特定できないです.
0904898
2006/11/04(土) 22:47:49ID:DqH0rqVhいやぁ、forならいいかなぁって。すいません。foreachの使い方
がいまいち馴染めなかったので、言ってみただけです。
0905898
2006/11/04(土) 22:52:44ID:DqH0rqVh>>900
行番号は別にいりません。ただhtmlのソースコードを取得したい
だけです。それで、file_get_contents()を使って、もっと
あっさりできないものかと思いまして。
0906nobodyさん
2006/11/04(土) 23:01:24ID:???echo htmlspecialchars(file_get_contents('http://www.yahoo.co.jp'));
取得するなら変数に格納
$data = file_get_contents('http://www.yahoo.co.jp');
いまいち何がしたいのかわからんけど
0907nobodyさん
2006/11/04(土) 23:01:58ID:???echo file_get_contents("URL");
というか、おまえサンプルのソースの内容を全く把握できてないだろう。
0908898
2006/11/04(土) 23:06:09ID:DqH0rqVhもう少し建設的なやりとりを交わせるようにがんばります。
0909nobodyさん
2006/11/05(日) 00:07:28ID:bwOCiosncreate table files (
id int not null auto_increment,
file longblob,
primary key (id)
);
で作ったテーブルにファイルを格納するところまでできたのですが、以下のコードで$fpにファイルハンドルが入らず、データがそのまま文字列として入ってしまいます。
$db = new PDO('mysql:host=localhost;dbname=hogehoge', 'user', 'pass');
$stmt = $db->prepare('select id, file from files where id = 1');
if (! $stmt->execute()) {
$info = $stmt->errorInfo(); echo $info[2];
}
$stmt->bindColumn('id', $id);
$stmt->bindColumn('file', $fp, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
var_dump($fp);
//fpassthru($fp);
//fclose($fp);
http://www.php.net/manual/ja/ref.pdo.phpの例12の通りだと思うのですが、どのように直したら$fpにファイルハンドルが入るかわかる方いますか?
レス数が900を超えています。1000を超えると表示できなくなるよ。