【PHP】下らねぇ質問はID出して書き込みやがれ 113
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/11/29(火) 19:55:27.17ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 112
http://hibari.2ch.net/test/read.cgi/php/1320005469/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0261nobodyさん
2011/12/11(日) 20:58:47.52ID:???$str1= "means"; //キーワードその1
$str2= "using"; //キーワードその2
// 正規表現あり
$delim = '/';
$pattern = sprintf("%s(?:%s)(.*?)(?:%s)%s", $delim, preg_quote($str1, $delim), preg_quote($str2, $delim), $delim);
preg_match($pattern, $str, $arr_str );
$match_str = $arr_str[1];
print $match_str . "\n";
// 正規表現なし
$match_str = '';
if (($str_work = strstr($str, $str1)) !== false) {
$str_work = substr($str_work, strlen($str1));
if (($i = strpos($str_work, $str2)) !== false) {
$match_str = substr($str_work, 0, $i);
}
}
print $match_str . "\n";
0262nobodyさん
2011/12/11(日) 21:03:47.29ID:???$match_str = '';
$s = strpos($str, $str1);
$e = strpos($str, $str2);
if ($s !== false && $e !== false && $s < $e) {
$match_str = substr($str, $s + strlen($str1), $e - $s - strlen($str1));
}
print $match_str . "\n";
0264nobodyさん
2011/12/11(日) 21:06:45.64ID:???方法は、いくつか考えられる
1) それぞれのフォーム先を変える
<form method="post action="a.php">
<button type="submit">Submit</button>
</form>
<form method="post action="b.php">
<button type="submit">Submit</button>
</form>
2) 押されたボタンの値で分岐させる
<form method="post" action="c.php">
<button value="a" type="submit" name="foo">Submit A</button>
<button value="b" type="submit" name="foo">Submit B</button>
</form>
<?php
switch ($_POST['foo']) {
case 'a':
// 処理
break;
case 'b':
// 処理
break;
}
参考程度に
0265nobodyさん
2011/12/11(日) 21:09:33.25ID:RMtDV+6Uこんなのができました。
疑問なのは、配列が一つしかないのが明らかな時は
foreach以外に使えるものはないですか?
foreach ($_POST as $key => $value)
;
if (substr($key, 0, 3) == "del") {
echo "削除" . substr($key, 3, 3);
}
0266nobodyさん
2011/12/11(日) 21:22:29.92ID:b3WuJveFおー、すばらしい。 3つともエラーなしでした。
感謝、感謝です。 今から勉強させてもらおうと思います。
0267nobodyさん
2011/12/11(日) 21:29:38.31ID:???$match_str = '';
$s = strpos($str, $str1);
if ($s !== false) {
if (($e = strpos($str, $str2, $s)) !== false) {
$match_str = substr($str, $s + strlen($str1), $e - $s - strlen($str1));
}
}
print $match_str . "\n";
2よりはこっちのがいいか。でも正規表現を使うべきかどうかの判断は俺にはできん
0268nobodyさん
2011/12/11(日) 21:38:44.26ID:b3WuJveFさらに、ありがとうございます。
0269nobodyさん
2011/12/12(月) 00:38:08.99ID:M66zaH+0キーワードその1には、<a href="
を、
キーワードその2には、" title="前ページへ戻る">
を、入れたいのですが
どうしたら、いいでしょうか?
率直に入れるとエラーになってしまいます。
>>261
> $str = "WEB means a server system using world wide web technology."; //検索される文字列
> $str1= "means"; //キーワードその1
> $str2= "using"; //キーワードその2
>
> // 正規表現あり
> $delim = '/';
> $pattern = sprintf("%s(?:%s)(.*?)(?:%s)%s", $delim, preg_quote($str1, $delim), preg_quote($str2, $delim), $delim);
> preg_match($pattern, $str, $arr_str );
> $match_str = $arr_str[1];
> print $match_str . "\n";
0270nobodyさん
2011/12/12(月) 00:43:03.09ID:???0271260
2011/12/12(月) 00:43:37.56ID:g5bZDfgQ遅くなりました。ありがとうございます。
<buttonを使うのは思いつきませんでした。
ありがとうございました。
0272nobodyさん
2011/12/12(月) 00:52:47.14ID:M66zaH+0エスケープでググってみたのですが、
http://hodade.adam.ne.jp/seiki/page.php?study_escape
『、<a href="』 と、『" title="前ページへ戻る"> 』 これだとエスケープする必要がないらしいんです。
0274nobodyさん
2011/12/12(月) 01:10:05.39ID:M66zaH+0レスありがとうございます。
$str1= "<a href="; //キーワードその1
は、通るのですが、
$str2= "" title="前ページへ戻る"; //キーワードその2
で、
Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs〜〜〜
と、エラーになります。
0277nobodyさん
2011/12/12(月) 01:37:12.34ID:M66zaH+0http://hodade.adam.ne.jp/seiki/page.php?study_escape
これには、『"』 をエスケープをエスケープしろとは書いてないけど。
0278nobodyさん
2011/12/12(月) 01:47:41.82ID:M66zaH+0たしかに、urlぶっこ抜き作業をやっているんだけど、で、その『DOM』というのは検索しておぼろげながらも知ってるんだけど、
あんまり、手を広げたくないんですw
0279nobodyさん
2011/12/12(月) 01:53:29.26ID:M66zaH+0> $match_str = $arr_str[1];
の行で、
Notice: Undefined offset: 1 in C:\xampp\htdocs
のエラーが出るんですよね。
0281nobodyさん
2011/12/12(月) 01:56:08.47ID:???0282nobodyさん
2011/12/12(月) 01:57:31.50ID:M66zaH+0失礼しました。
0283nobodyさん
2011/12/12(月) 02:10:23.99ID:???0284nobodyさん
2011/12/12(月) 02:17:45.57ID:???0285nobodyさん
2011/12/12(月) 02:30:45.32ID:???0286nobodyさん
2011/12/12(月) 03:24:07.78ID:M66zaH+00287nobodyさん
2011/12/12(月) 03:28:58.48ID:M66zaH+0ところが、キーワードに漢字がからむとダメみたい。
<?php
// ★★★★★欲しいブログのアドレスをここに書き込む。★★★★★★
$url="http://takedanet.com/2007/02/1_6fc8.html";
// htmlの全読み込み
$nikki = file_get_contents($url);
$str1= "<a href=\""; //キーワードその1
$str2= "\">«"; //キーワードその2
$delim = '/';
$pattern = sprintf("%s(?:%s)(.*?)(?:%s)%s", $delim, preg_quote($str1, $delim), preg_quote($str2, $delim), $delim);
preg_match($pattern, $nikki, $arr_str );
$match_str = $arr_str[1];
print $match_str . "\n";
// ↓↓ データファイル名を決める。
$fp = fopen("nikki.html","a");
fputs($fp,$nikki);
// ソケットを閉じる
fclose ($fp);
0288nobodyさん
2011/12/12(月) 03:38:33.55ID:g5bZDfgQ簡単にHTMLタグをつけてくれる関数や方法ってありませんか?
ぐぐったら
http://www.emirplicanic.com/php/php-function-to-generate-html-table-using-mysql-database-data
こんなのを見つけましたが。他にあったらお願いします。
0289nobodyさん
2011/12/12(月) 03:41:03.97ID:???0292nobodyさん
2011/12/12(月) 03:49:53.41ID:g5bZDfgQありがとうございます。調べてみます。
>>291
SELECT * FROM hoge;
を実行してなにも考えずに<table>から吐いてくれるとうれしいです。
できればカラム名もつけて。
MySQL接続時に -H オプションをつければいいようですが、
PHPから接続するときには対応してないようです。
0293nobodyさん
2011/12/12(月) 03:58:23.47ID:???http://hibari.2ch.net/test/read.cgi/tech/1323566370/
0294nobodyさん
2011/12/12(月) 04:05:59.35ID:???http://php.net/manual/ja/function.mysql-fetch-assoc.php
フィールド名入ってるよ。
ただ、0件のときは面倒かもしれない
0295nobodyさん
2011/12/12(月) 04:07:58.65ID:???0296nobodyさん
2011/12/12(月) 04:13:08.26ID:g5bZDfgQforeach($row)とかでフィールド名を取り出せばいけますね。
一般に見せるページはちゃんとフィールド名を入れて
作ってるのですが、管理画面は作るのが面倒でw
0297nobodyさん
2011/12/12(月) 05:40:08.27ID:M66zaH+00298nobodyさん
2011/12/12(月) 06:05:55.81ID:NHIpwqKq0299nobodyさん
2011/12/12(月) 06:08:12.37ID:???0300nobodyさん
2011/12/12(月) 06:31:39.54ID:M66zaH+0file_get_contents()で取り込んだデータをざっくり2分割したいんですよね。
0301nobodyさん
2011/12/12(月) 06:44:12.15ID:M66zaH+0マニュアルにも書いてないんですよ
0302nobodyさん
2011/12/12(月) 06:44:18.12ID:???0303nobodyさん
2011/12/12(月) 07:04:30.12ID:M66zaH+00305nobodyさん
2011/12/12(月) 10:48:58.06ID:NA15lax7sqliteが使えません。これはどうしてでしょうか?
[PHP_PDO_SQLITE]
extension=php_pdo_sqlite.dll
0306305
2011/12/12(月) 11:39:02.23ID:???自分がしょぼいプログラマだったらどんな処理をするか考えて対処したら動くようになったw
0307305
2011/12/12(月) 14:10:47.40ID:???0308nobodyさん
2011/12/12(月) 17:06:36.09ID:15hpQrXGPHP5.3.8の環境で、某ライブラリを利用していたらE_DEPRECATEDという見慣れないエラーが出力されました
それで、ググったら
http://php.net/manual/ja/migration53.deprecated.php「PHP 5.3.x で推奨されない機能」というページを見つけ
そこに以下のように書いてありました
推奨されない機能
new の返り値を参照で代入すること
呼び出し時の参照渡し
ライブラリのエラー対象行には
$obj = & new $class_name($param);
と書いてあります
これがまさに推奨されない機能にあたるってことでしょうか。どちらかに該当したのでしょうか。別の問題でしょうか?
「new の返り値を参照で代入すること/呼び出し時の参照渡し」の両方とも具体的にどういうのかわかりません
具体的にどういうものなのか、すみませんが教えてください
0309nobodyさん
2011/12/12(月) 17:31:48.02ID:???これは参照で代入してる。
なので、
> $obj = & new $class_name($param);
これは、newの返り値を参照で代入してる。
0310308
2011/12/12(月) 17:34:33.61ID:???ありがとうございました
自分はこれ使ったことなかったんで今まで無縁だったんですね
効果など調べてみます、ありがとう
0311nobodyさん
2011/12/12(月) 21:05:50.74ID:M66zaH+0$url="http://park16.wakwak.com/~html-css/hp_koza/lv_3.html";
$nikki = file_get_contents($url);
preg_match('/script(.+)CSS/', $nikki, $matches);
print_r($matches);
↑だと、同一行内なので文字列を拾えるのですが、
↓のように、改行を挟むと文字列を拾えません。 改行があっても文字列が拾えるようにするにはどうすればいいでしょうか?
<?php
$url="http://park16.wakwak.com/~html-css/hp_koza/lv_3.html";
$nikki = file_get_contents($url);
preg_match('/script(.+)keywords/', $nikki, $matches);
print_r($matches);
0312nobodyさん
2011/12/12(月) 21:19:07.36ID:???0313nobodyさん
2011/12/12(月) 21:48:07.51ID:M66zaH+0おー、ありがとうございます。よくわからないけど、適当にsを付けたら改行を挟んで拾えるようになりました。
ありがとうございました。
0314nobodyさん
2011/12/12(月) 22:03:56.84ID:1pnkY9E6利用したいんですが、オススメ等ありましたら、宜しくおねがいします。
0315nobodyさん
2011/12/12(月) 22:27:59.81ID:???0316nobodyさん
2011/12/12(月) 23:11:06.87ID:v66Vpq3K$rss = simplexml_load_file( "http://blog.livedoor.jp/dqnplus/index.rdf" );
print_r( $rss->xpath( "//title" ) );
結果は空の配列になのですが、これは何を間違っていますか?
rss は
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel rdf:about="http://blog.livedoor.jp/dqnplus/">
<title>痛いニュース(ノ∀`)</title>
のようになっているので title 要素がないわけではありません。
0317nobodyさん
2011/12/12(月) 23:14:07.14ID:???0318nobodyさん
2011/12/12(月) 23:35:04.86ID:???0319nobodyさん
2011/12/12(月) 23:42:34.98ID:v66Vpq3K$rss->channel->title;
だと値を取得できます。
でもxpath にすると駄目なようです。
simplexml_load_file の第二引数が必要な気がしているのですが、何を入れればいいのか分からないです。
0320nobodyさん
2011/12/12(月) 23:51:19.30ID:???$rss->channel->title;であるならばxpath()の中に何を入れますか?
0321nobodyさん
2011/12/13(火) 00:21:07.48ID:l7M8JeoW携帯のメールを解析/添付ファイルをアップロードなどするために便利な道具として
PearのMail_mimeDecode と Qdmail_receiverがあると思いますが、どっちがおすすめですか?
お勧めする・使ってる理由があったら教えてもらえると嬉しいです
もしくは、これ以外にも便利なツールあるでしょうか?
また、上記とは別に、
携帯メールでの日記投稿/写真アップロードなどした後(postfixからのパイプ処理で)、
そのメールのデータは不要になるので、添付ファイルごと該当ファイルを削除したいです
(メールボックスの形式はMaildirです)
どうやったらこの処理は実現できるんでしょうか?
どなたか教えてください。よろしくお願いします
0322nobodyさん
2011/12/13(火) 00:47:25.54ID:p0PBCRmHそうでなかったら変換すれば良い。
0323nobodyさん
2011/12/13(火) 00:59:11.21ID:???それぞれ検索して何が出来るかもう一度読むといいかも。
受信メールの処理のサンプルとか含めて。
まず、メールをPOPかなんかでとりに行くのか、 パイプで処理するだけなのか。
そのとき、添付ファイルはどうやって取得するのか調べればすぐ分かるから。
それら全部はここには書ききれない。
0324nobodyさん
2011/12/13(火) 01:06:48.24ID:???夜中にありがとうございました
もう少し頭整理して調べてみます。それでわからなかったらまた聞かせてください
0325nobodyさん
2011/12/13(火) 01:10:31.75ID:u1iPfY/AtestHOGEメソッドが認識されなくて
LK(0 tests, 0 assersion)になる。
public function testHOGE() {
$this->assertTrue(false);
}
こんな感じだよね?
構文崩すとエラーになるのでファイル自体は認識されている模様
windows7 XAMPP2.5 PHPUnit3.5.14(xamppに最初から入っていたみたい)
0326325
2011/12/13(火) 01:11:36.30ID:u1iPfY/A0327nobodyさん
2011/12/13(火) 07:07:05.94ID:7NxNFZMgcurl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "<xml>25kb分");
これでやるとローカルでは問題ないんですが共有サーバーだと90MBとかの異常なメモリ割り当てが発生して
エラーになってしまいます。(本来は array('key' => 'value') 形式で指定するので間違った使い方なのかも)
試しに
curl_setopt($ch, CURLOPT_POSTFIELDS, array('key' => "25kb分の文字列"));
としたところ送信はできますが、相手が要求するフォーマットがxmlでkey=value形式ではないのです。
この問題はHTTP/Request.phpのaddRawPostData()を用いて送信し解決できましたが
後学のためcurlでPOSTする方法教えてもらえないでしょうか
0328nobodyさん
2011/12/13(火) 11:58:47.97ID:55RnZhjcエンコード後のパスにアクセスしてしまいます。
サーバーはいつデコード処理をしてるんでしょうか。
Windowsではurlエンコードは使えませんか。
0329nobodyさん
2011/12/13(火) 12:06:00.61ID:???0330328
2011/12/13(火) 12:13:37.74ID:55RnZhjc$path="C:/アニメ.txt"; file_put_contents($path, "0");
$path="C:/" . urlencode("アニメ.txt"); file_put_contents($path, "1");
$path=urlencode("C:/アニメ.txt"); file_put_contents($path, "2");
$path= "file:///" . urlencode("C:/アニメ.txt"); file_put_contents($path, "3");
return;
0331nobodyさん
2011/12/13(火) 12:48:55.35ID:???とかじゃだめなんか?
0332nobodyさん
2011/12/13(火) 13:29:35.03ID:???0333nobodyさん
2011/12/13(火) 13:41:25.56ID:???file_put_contents はURLエンコードされたファイル名を受け付けるとか
その先にあるファイル名を扱う関数群がURLエンコードを受け付けるとか
OSがURLエンコードを受け付けるとか、どっかに書いてあったのか?
0334nobodyさん
2011/12/13(火) 15:41:29.01ID:1bAeIiq3特定のディレクトリにユニークな名前のファイルを作りたいと思って以下のようにしました
$image_dir = "/var/www/user_file/";
$path = tempnam($image_dir, '');
が、実際には/var/www/user_file/xxxxxみたいなファイルはできず、/tmp/xxxxxというファイルが代わりにできてしまいます
tempnam()の仕様を読んだところ「対象のディレクトリがないときはシステムの一時ファイル領域にファイルを作る」と
ありますが、$image_dirのディレクトリは存在しています。
で、さらに調べたら、ls -la /tmp/xxxxx の結果が 0600 nobody:nobodyになってました
(このスクリプトは携帯メールの添付ファイル保存が目的で、postfixからのパイプ処理で動いています
また、ls -la /var/www/user_file/ の結果は 0775 apache:apacheです)
質問
・このnobodyユーザ扱いのせいで$image_dirにファイルを作れないと考えて間違いないですか?
・どうやったら、当初の目的のディレクトリ$image_dirにファイルを作れるでしょうか?
$image_dirの権限を0777 にする以外の方法でお願いします
たとえばtempnam()の実行時にapacheユーザとしてファイルを作れたら良いはずですが、
そんなこと可能でしょうか
0335nobodyさん
2011/12/13(火) 15:48:15.18ID:???0336nobodyさん
2011/12/13(火) 15:54:29.94ID:???わかってない奴が安易にやると穴が開くからお勧めできんが
あとはディレクトリのオーナーをnobodyに
0337nobodyさん
2011/12/13(火) 16:18:40.01ID:M1gnknNtすみませんが、私にはわかりませんので、ほかの人に聞いてください
0338nobodyさん
2011/12/13(火) 16:30:18.18ID:M1gnknNtcurlとPOSTでググるとよいと思います。
0339nobodyさん
2011/12/13(火) 17:30:43.08ID:???編集が楽なので1ファイルの1行ごとに内容をまとめて、そのファイルの行ごとの内容を呼び出したいです。
例
test.phpの156行目を出力する
このようなことは可能でしょうか?
0340339
2011/12/13(火) 17:31:39.90ID:TW5GIlZo0341nobodyさん
2011/12/13(火) 17:47:48.67ID:???test.phpがテキストデータなら可能
おまえはMVCを学ぶべき段階にきていると思うよ
何かフレームワークを使って作れ
0342nobodyさん
2011/12/13(火) 17:53:47.68ID:???需要ないんだろうしさ
0343339
2011/12/13(火) 17:55:16.26ID:TW5GIlZoテキストデータのtest.txtで問題ないです。
MVC、フレームワークはよくわからないので、
<?php include("test.txt"); ?>
になにか加えて簡易的にできる方法を教えてもらえれば助かります
0344nobodyさん
2011/12/13(火) 18:22:25.21ID:???改行コードで分割して、156行目のデータを出力
実行したいならeval、だけど、なんか変だと思うよそれ
0345nobodyさん
2011/12/13(火) 18:38:07.02ID:XO4P9E+zこれが正しいらしいのですが、
echo $name ."<br>";
これでもエラーになりません。
\n
これっていったい何なんでしょうか?
0346nobodyさん
2011/12/13(火) 18:38:24.87ID:???フレームワークうんぬんは無視しとけ
// メモリが問題にならないなら
$test = file('test.txt');
echo $test[155];
// 問題になるなら
$test = fopen('test.txt', 'r');
for ($i = 0; $i < 155 && fgets($test) !== false; $i++) { }
echo fgets($test);
0348nobodyさん
2011/12/13(火) 18:56:01.44ID:???0349nobodyさん
2011/12/13(火) 18:57:10.47ID:???どっちにしろおかしいけど
0352nobodyさん
2011/12/13(火) 19:08:32.89ID:???相変わらず芸がないな
0353nobodyさん
2011/12/13(火) 19:18:45.55ID:???バリデーションやら、これでよろしいですか?画面やら
DBにインサートやら正直キレそうなんですけど
これらを、簡単に制作することはできないんですか?
0354353
2011/12/13(火) 19:22:20.94ID:B3orhDGR0357nobodyさん
2011/12/13(火) 19:46:52.95ID:???0360nobodyさん
2011/12/13(火) 20:06:35.36ID:Y6ZWV3Gc■ このスレッドは過去ログ倉庫に格納されています