【PHP】下らねぇ質問はここに書き込みやがれ 69
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/05/27(火) 18:04:33ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 68
http://pc11.2ch.net/test/read.cgi/php/1209822736/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0529nobodyさん
2008/06/14(土) 11:40:11ID:???0530nobodyさん
2008/06/14(土) 11:52:08ID:???0531nobodyさん
2008/06/14(土) 14:21:20ID:QTSkypnpは何て言っているんですか??
0532nobodyさん
2008/06/14(土) 14:45:47ID:???0533513
2008/06/14(土) 15:00:41ID:SvNsf5Rjありがとうございます
fopen("ftp://アノニマス:パスワ@ftp.a.ne.jp/headline/headline.log","w");
wwwフォルダだったので新たにheadlineフォルダを作ってそこのパーミッションを
766でやってみました。ファイルのパーミッションは666です。
次はFTP server reports 553 /headline/headline.log: No such file or directory
となりました。ファイルのパスなどは間違えていないのですが…
0535513
2008/06/14(土) 16:44:49ID:SvNsf5Rjサクラのレンタルでも調べられますか?
あと、別にFTPに拘ってるわけでもなく複数のサーバー使ってるので
それらの情報をヘッドライン.logとして書き込めれば何でもいいのですが…
オススメの関数とかありますか?
ちなみにソケットとか言うのはサーバー側が使えません。
関係ないかもしれませんが。
0536nobodyさん
2008/06/14(土) 17:27:37ID:???sakura共有なら普通にftp関数使ってユーザでログインすればいいんじゃない?
たしかftpはインスコされていたと・・・
http://www.php.net/manual/ja/function.ftp-put.php
0538nobodyさん
2008/06/14(土) 17:53:13ID:???うちのsakura共有でやってみた。以下でいけたぽい
unlink("ftp://ゆーざID:パスワード@ホストIP/home/ゆーざID/www/test.txt");
$fp = fopen("ftp://ゆーざID:パスワード@ホストIP/home/ゆーざID/www/test.txt", "w");
fputs($fp, date("Y-m-d H:i:s"));
fclose($fp);
sakuraのユーザID、パスを使う
ファイルがある場合は先に削除しないとエラーになる(上書きできないみたい)
ホストIP以降のパスはフルパス
0539535
2008/06/14(土) 18:04:15ID:SvNsf5Rjマジですか…
先にファイルのデータを読み取ってそれに追加したいのですが…
とりあえず試してみます
0540535
2008/06/14(土) 18:11:15ID:SvNsf5Rjしかし、メチャクチャ遅いのですが…
さらに書き込み終わった後、すぐにエラーでIEが閉じてしまいました…
0541nobodyさん
2008/06/14(土) 23:11:31ID:???PHPでCSVのデータを表示できる事は出来たのですが
その各項目をテーブルに収めたいのです。。
echo を使うと大変で(汗 Smartyを使うしかないのでしょうか?
0542nobodyさん
2008/06/14(土) 23:17:41ID:???<table summary="hoge">
<tbody>
<?php foreach($array as $val): ?>
<tr>
<td><?php echo $val[0]; ?></td>
<td><?php echo $val[1]; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
こういう書き方じゃダメ?
0543nobodyさん
2008/06/14(土) 23:22:53ID:???最近では非推奨らしいけど、ショートタグとか言われてる記述があるよ。
<?php echo $hoge; ?>
↓
<?=$hoge?>
0544nobodyさん
2008/06/15(日) 00:11:54ID:???0545nobodyさん
2008/06/15(日) 00:22:00ID:???0546nobodyさん
2008/06/15(日) 01:55:32ID:???0547nobodyさん
2008/06/15(日) 02:27:18ID:qXYgnKYOはどうゆうエラーですか??
0549nobodyさん
2008/06/15(日) 03:01:05ID:???0550nobodyさん
2008/06/15(日) 15:02:23ID:T2nrQoQeたまに、
Fatal error: Allowed memory size of xxxxxx bytes exhausted
を吐くのですが、エラーログにファイルパスを吐いてくれません。
php.iniの設定がまずいのでしょうか?
他のerrorはファイルパスを吐きます。
どうすれば、ファイルパスを吐かせることが出来るか、
ご教示下さい。よろしくお願いします。
出来ない場合のプランとしてob_startと、$php_errormsg
ob_get_contents()、$_SERVERなどを使ってログ出しを
しようかなと思っています。
0552nobodyさん
2008/06/15(日) 16:46:24ID:PnCbQKDpif(eregi("$value$",$host))
としているのですが仮に
ZQ068252.ppp.dion.ne.jpと言うIPがあるとして
valueに「.ppp.dion.ne.jp」と書くと規制するのですが
「ZQ068252.」の部分で規制しようとするとスルーします
どうしてでしょうか?
0553nobodyさん
2008/06/15(日) 16:58:36ID:???を
if(eregi($value,$host))
にすればok
0554552
2008/06/15(日) 17:01:46ID:PnCbQKDp最後の$はこれ以降文字があったらダメ!
みたいな設定ですかね?
とにかくありがとうございます。
0555nobodyさん
2008/06/15(日) 17:06:34ID:???0556552
2008/06/15(日) 17:06:46ID:PnCbQKDp弾くようになってしまったのですが…
それ以外何も弄っていません
0558552
2008/06/15(日) 17:17:35ID:PnCbQKDp$が行の最後で^が行の最初と書いてました…
現在も捜索中ですが「.ppp.dion.」の中間文字列など
文字列がマッチするって言う表記がありません…
調べて見ますが一言で片付くならご教授お願いします
0559nobodyさん
2008/06/15(日) 17:18:25ID:???どんだけ自己中心的なのw
0560552
2008/06/15(日) 17:21:42ID:PnCbQKDp"\/$value\/"で大丈夫でしょうか?
今から実験してみますがw
0561552
2008/06/15(日) 17:25:27ID:PnCbQKDp…つwww
ダメじゃん orz
0562nobodyさん
2008/06/15(日) 17:32:37ID:???http://pc11.2ch.net/test/read.cgi/php/1168450843/
0563nobodyさん
2008/06/15(日) 17:33:47ID:???ではじくなら
$value = "/ZQ068252\..+\.dion/";
if(eregi($value,$host)) {/*やりたいこと*/};
で、どう?検証してないから駄目かもですが。
0564nobodyさん
2008/06/15(日) 17:49:14ID:???0565nobodyさん
2008/06/15(日) 17:50:19ID:???0566nobodyさん
2008/06/15(日) 21:13:30ID:4qgDFbgLecho session_id();
というページを閲覧し、web developper(firefoxのアドオン)で
HTTPレスポンスヘッダを閲覧しても、
クッキーを設定しているフィールドが見えません。
ヘッダの、
クッキーを設定しているフィールドを見ることができるアドオンがあれば
おしえてください。
どういう生ヘッダで書かれているのかみたいんです
0567nobodyさん
2008/06/15(日) 21:55:17ID:???0568nobodyさん
2008/06/16(月) 01:33:53ID:d68qAwtQセッションクッキーを、
setcookieで上書きしたいのですが、
セッションと同名のクッキーをsetcookieで発行しても、上書きできず、
クッキーフィールドが二行になってしまいます。
セッションクッキーのフィールドを上書きする方法はないものでしょうか?
0569nobodyさん
2008/06/16(月) 03:18:40ID:???$foo = new hoge;
$bar = $foo->as_strings;
print $bar;
exit;
この場合は、正常に動作するのですが、
$foo = new hogeHoge;
$bar = $foo->as_strings;
print $bar;
exit;
class hogeHoge{
function __construct() {
}
}
0570569
2008/06/16(月) 03:21:15ID:???include_once("hogeclass.php");
$foo = new hoge;
$bar = $foo->as_strings;
print $bar;
exit;
上の例は、正常に動作するのですが、
下の例では、失敗します。
$barに何も値が入りません。
$foo = new hogeHoge;
$bar = $foo->as_strings;
print $bar;
exit;
class hogeHoge{
function __construct() {
...省略
}
...省略
}
PHPファイルで、クラスを直接扱いたい場合は
どのようにすればよろしいでしょうか?
注意点あるいは参考サイト、資料などを教えて頂けますと幸いです。
0571nobodyさん
2008/06/16(月) 03:58:25ID:???http://jp.php.net/oop5
0572nobodyさん
2008/06/16(月) 11:57:07ID:???で、例えば「あ1い」から4バイトとろうとすると文字化けしてしまう。
うまいこと文字化けせずに出せるような関数ありますか?
なければ文字化けせずにとれるうまい方法を教えてほしいのですが。
0573nobodyさん
2008/06/16(月) 12:47:09ID:???世界最高のハッカーでもそれは無理な相談だ。
2文字じゃなく4バイトなんだよな?
4バイト目がマルチバイトの一部の場合は、
3 or 5バイト取得したいってわけでもないんだよな?
この意味が分からんなら、ちょっとバイトについて勉強してこい。
この意味が分かるなら、人に伝達する努力をしろ。
0574nobodyさん
2008/06/16(月) 12:48:35ID:???それよりバイトしろ。
0575nobodyさん
2008/06/16(月) 12:51:05ID:???0576nobodyさん
2008/06/16(月) 13:01:42ID:???0577nobodyさん
2008/06/16(月) 13:08:57ID:???0578nobodyさん
2008/06/16(月) 13:55:38ID:???0580nobodyさん
2008/06/16(月) 14:05:46ID:???0582nobodyさん
2008/06/16(月) 14:10:54ID:???0583nobodyさん
2008/06/16(月) 14:29:35ID:???普通にふぃっちするだけなんだけど。
0585nobodyさん
2008/06/16(月) 15:01:09ID:???$sql = "select * from users order by id ";
$stmt = Db::singleton()->prepare($sql, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
$stmt->execute();
var_dump( $stmt->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 3) );
var_dump( $stmt->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 1) );
こんな感じ
普通にIdが1・2・3という順番でくる
0586nobodyさん
2008/06/16(月) 15:29:45ID:???ぐぐったら上から3つ目くらいに出てきた
0587nobodyさん
2008/06/16(月) 16:49:42ID:NSiUFpCpなにか良いアイデアはないでしょうか?
このとき、多次元配列の深さ(?)はマチマチです。
たとえば、
$hoge = array(
'a' => 'a1',
'b' => array(
'b1' => 'b1',
'b2' => array(
'b2_1',
'b2_2'
)
)
);
このような配列があるとき
print(in_array('b2_1', $hoge));
で、trueが返ってくるようにしたいのです。
自分なりに考えたのは
foreachで回して、もし配列だったらさらにforeachで回す、
というような方法なのですが、
もうすこしスマートなやりかたがあったら教えていただきたいのですが・・・
アドバイスお願いします。
0588nobodyさん
2008/06/16(月) 17:10:05ID:???0589nobodyさん
2008/06/16(月) 17:14:43ID:???function recursive_in_array($str, $arr){
$ret = false;
foreach($arr as $v){
if(is_array($v)) $ret = recursive_in_array($str, $v)?true:$ret;
else $ret = $v==$str?true:$ret;
}
return $ret;
}
0590587
2008/06/16(月) 17:25:50ID:NSiUFpCparray_walkという関数は知っていましたが
array_walk_recursiveという関数もあったのですね!
これをうまく使えばなんとかなりそうです。
>>589
あらかじめ関数を作って、配列が見つかったらもう一度関数を呼び出す、
ということですね!
たしかにこれならスマートにできますね!
ほんとうにみなさんの知識や発想にはいつも驚かされます。
ありがとうございました!
0591nobodyさん
2008/06/16(月) 18:28:20ID:???$target = 'b2_1';
array_walk_recursive( $hoge, create_function( '$value,$key', 'if( $value == $target ) print "true";' ) );
眠くて、全然思考がまとまらんのに、なぜこんなことやってんだろ?w
0592nobodyさん
2008/06/16(月) 19:51:28ID:pwDo5eRwPDOを使った、総レコード数を出すにはどうしたらよいでしょうか?
rowCount()は知っているのですが、これもいまいち使えません。。。
ちなみに、ページ切り替え処理をやるために、総レコード数を出そうとしています。
宜しくお願いいたします。
0594nobodyさん
2008/06/16(月) 20:23:25ID:pwDo5eRwありがとうございます。
ただ、
$SQLtxt = "SELECT COUNT(*) FROM table_name;";
$ss = $dbh->query($SQLtxt);
print "レコード数:$ss<BR>";
上記でもダメだったのですが、
数値化するために何かする必要はありますか?
0595nobodyさん
2008/06/16(月) 20:25:17ID:???0597nobodyさん
2008/06/16(月) 20:42:31ID:pwDo5eRwありがとうございます。できました!
向学ののために知りたいのですが、fechでも可能なのでしょうか?
$dbh = new PDO($host, $user, $pass);
$SQLtxt = "SELECT COUNT(*) FROM table_name;";
$ss = $dbh->fech($SQLtxt);
print "レコード数:$ss<BR>";
上記で実行したところ、fetchの行がエラーとなりました。。。
このあたり、prepareとか使えば、このあたり処理が速くできそうですね。
0598nobodyさん
2008/06/16(月) 20:42:54ID:IjgN4Ncjテキストファイル(実態はhtmlのソース)の中から、
<img src=".*">となっているところのみを抜き出して表示したいのですが、
if (preg_match_all("/<img src=.*>/si", file_get_contents("hoge.txt"), $matchs)) {
foreach ($matchs as $value) {
echo $value . "<br>\n";
&nsbp;}
}
という風な感じだと、
最初に現れる<img src=から、最後に現れる</html>まで全てmatchしてしまいます。
<img src=.*>のものだけを取り出すにはどのように改良したらよいか教えてください。
<img src="example0.jpg"><br>
<img src="example1.jpg"><br>
<img src="example2.jpg"><br>
このようにしたいです。
0602nobodyさん
2008/06/16(月) 22:00:42ID:6F6SIf0Vとして60秒間はクッキーが有効になる設定をしているのですが、
60秒経ってもクッキーが消えていない時があります。(ifでチェックすると)
こういう場合、どうすればいいのでしょうか?
アクセスする環境やPCの問題なので、仕方ないのでしょうか?
0603nobodyさん
2008/06/16(月) 22:46:53ID:???きっちり60秒で消えなければいけない場合は時計の同期を考えないといけない
誤差程度の時間で消えてるなら気にしなくても大丈夫
どうしても60秒経過の判定が必要なら
何秒に発行したかまでクッキーに書いておいて読み込んで判定させるといい
0604nobodyさん
2008/06/17(火) 00:58:42ID:uGaLdLWHheader( "Content-type:text/html;charset:utf-8" );
print "こんにちは";
?>
上記スクリプトを、
UTF-8で記述すると、IE7で文字化けします(Shift-JISで表示)。
※ ちなみに、FireFox2.0 / OPERA / Safari は、OKでした。
また、上記スクリプトの記述を、Shift-JIS にすれば、IEで正常に表示されます。
UTF-8で記述した上記のスクリプトでも、IEで文字化けしない対策はありませんでしょうか?
また、こういった事例と対策が説明されているページや資料などありましたら、
ご教示頂けましたら幸いです。
0605nobodyさん
2008/06/17(火) 01:02:32ID:???0606nobodyさん
2008/06/17(火) 01:08:30ID:???うわ……w
ありがとうございます。
もの凄い単純なミスでした。
どうして気付かないときは、半日でも一日でも気付かないんだろう……orz
0607nobodyさん
2008/06/17(火) 01:15:38ID:???$port = 8080;
$url = "http://";
$fp = fsockopen($proxy, $port);
while(!feof($fp)){
$line = fgetss($fp, 4000);
print($line);
}
fclose($fp);
このようにプロキシ経由でソースを取得します。
mb_strpos関数である文字列が最初に現れる位置を探し
mb_substr関数で上記で取得した位置に+2した値から
文字を取り出すようなプログラムを考えています。
これら2つの関数の使い方は分かるのですが
fgetssを使用しているので上手く組み込むことが出来ません。
ソースの取得法又は関数で何かご教授いただきたいです。
0608nobodyさん
2008/06/17(火) 01:18:10ID:???してループ抜けてからmb使えば?
0609568
2008/06/17(火) 01:22:10ID:???遂にセッションIDを上書きする方法を見つけました!
header('Set-Cookie: '.session_name().'='.session_id().'; path=/');
とheaderで出力したら二行になりませんでした
0610nobodyさん
2008/06/17(火) 01:28:33ID:???それらの行全体での位置を探し、取り出したいので
ループを抜け出すと一行分しかできません。
取得法を変えるしかないですかね。
0614nobodyさん
2008/06/17(火) 07:04:37ID:???0615nobodyさん
2008/06/17(火) 10:27:36ID:cJ7L3+9Aとりあえず、設定がしてあるときにはfunctionの中身を定義して、
無いときには、空のfunctionを定義しています。
0616nobodyさん
2008/06/17(火) 10:33:45ID:???0617615
2008/06/17(火) 10:42:28ID:cJ7L3+9ACだと、
#if
#define NANIKA (hogehoge())
#else
#define NANIKA ()
#endif
という風にやれば、ある条件の時のみ、hogehoge()が実行されます。
PHPのほうでは
function nanika() {hogehoge();} と
function nanika() {;} をifの分岐でそれぞれ定義しています。
今のやり方よりも、実行時の負荷の低くなるやり方があれば、教えてください。
0618nobodyさん
2008/06/17(火) 10:45:13ID:???0620602
2008/06/17(火) 11:16:09ID:???レスありがとうございます。数秒の誤差は気になりますので
やっぱりちゃんと判定できる必要があります。
>何秒に発行したかまでクッキーに書いておいて読み込んで判定させるといい 何秒に発行したかまでクッキーに書いておいて読み込んで判定させるといい
と言うのはタイムスタンプを入れてそれで判別するということでしょうか?
0621615
2008/06/17(火) 11:18:54ID:cJ7L3+9A整理しなおしてみます。
Cだと、
#if jouken
#define nanika(x) (nanika_func(x))
#else
#define nanika(x) ()
#endif
のようにすれば、nanika(hogehoge());は、
joukenのときだけnanika_func(hogehoge());を実行し、
joukenから外れる場合はnanika_func()もhogehoge()も実行されません。
PHPのほうでは
if (jouken)
function nanika(x) {nanika_func(x);} else
function nanika(x) {;}
のようにしておいて、nanika(hogehoge());というコードを書いています。
この場合、joukenに合わない場合、hogehoge();が一度実行されますが、
hogehoge();も実行されないようにできれば、
負荷を減らせられると考えています。何かありませんか?
hogehoge();が実行されるときの副作用に関しては、
現時点でも注意を払っています。
0622nobodyさん
2008/06/17(火) 11:30:17ID:???if(JOKEN) nanika(hogehoge());
ではアカンの?
0623nobodyさん
2008/06/17(火) 11:30:33ID:???そこまで負荷を気にするのであればAPC等のアクセラレータを考えたほうがいい
0624nobodyさん
2008/06/17(火) 11:36:08ID:???Cだと、条件成立時には前者が関数としてコード化され実行ファイルに組み込まれ、
不成立だと消滅する。
実行時に条件判定をするなら、これは使えないんじゃないかな。
0625615
2008/06/17(火) 12:10:45ID:cJ7L3+9Aインタプリタなスクリプト言語でも、構文解析はともかく、
実行時は処理せずスキップする何かがあるかもと思って質問しました。
よくよく考えると実行時にスキップできるような処理系なら、
特別な構文とか技を使わなくても処理をカットするように実装するだろうから、
普通に記述してれば最適なようになってるでしょうね。
>>624
実行時というか、nanika()を呼ぶたびではなく、
function nanika();の定義時にjoukenを判断するだけでかまいません。
0626nobodyさん
2008/06/17(火) 13:13:39ID:DvvNmeRSmodみたいな…
test.htmlをCGIに偽装して
test.cgiみたいにできる奴…
■ このスレッドは過去ログ倉庫に格納されています